sails

sails是一套功能強大的web framework,他有express的template generate功能,也具備restful api的產生功能,更可以跟後端的資料庫進行restful api與orm對應整合...

Github repository

Github: https://github.com/balderdashy/sails/ 官網:http://sailsjs.org/ 文件:http://sailsjs.org/documentation/concepts/

Installation

sudo npm -g install sails

Sample Usage

Sails的指令語法與express相仿,下面介紹他的基本使用:

建立新專案

sails new [project name]

啟動專案

一般express的專案會需要在建立完之後做"npm install"的套件安裝動作,但在sails中,他會直接用symbolic link將套件鏈結到sails已經有的套件位置,讓整個安裝與啟動過程可以更加快速。

cd $project
sails lift

使用auto generate的restful api

建立一個user物件

在該application建立user物件api:

sails generate api user

執行呼叫建立user物件:

curl http://localhost:1337/user/create

如果一切無誤,會看到下面的回覆:

{"createdAt":"2015-08-15T17:28:53.366Z","updatedAt":"2015-08-15T17:28:53.366Z","id":1}

查詢所有的user列表:

curl http://localhost:1337/user/find

回覆如下:

[{"createdAt":"2015-08-15T17:28:53.366Z","updatedAt":"2015-08-15T17:28:53.366Z","id":1}]

查詢id=1的user

curl http://localhost:1337/user/1

如果該id可以查得到對應的物件,則會就該物件資訊回覆

{"createdAt":"2015-08-15T17:28:53.366Z","updatedAt":"2015-08-15T17:28:53.366Z","id":1}

而針對查詢不到的id,則會有以下訊息:

$ curl http://localhost:1337/user/3
No record found with the specified `id`.

開發一個頁面

對照express的使用方式,express是直接在app.js中建立routing(ex: app.get('/api/:id', ...))或是express4中,在routing資料夾中建立對應的routing然後再link回app.js,並且對應頁面樣板到views資料夾下面。 而sails中,則是在config/routes.js中定義routing,而所指定的頁面樣板,一樣指定到views資料夾下。

在Express中

Express - app.js

app.get('/test/:data', function(req, res, next){
    res.render('result', {data:'api data:' + req.params.data});
})

Express - views/result.ejs

<%- data %>

在Sails中

Sails - config/routes.js

module.exports.routes = {
  '/test/:data':
    { controller: 'Result', action: 'hello' }
}

這邊需要注意,在我們指定controller的部分,Result是一個short name,實際建立檔案時候需要用ResultController.js,Sails才找得到這個檔案...,除了這樣寫,也可以用下面的方式:

直接使用字串方式,用short name呈現:

'/test/:data': 'Result.hello'

直接使用字串方式,用full name呈現:

'/test/:data': 'ResultController.hello'

或是透過json方式並以玩逞名稱定義:

'/test/:data':
    { controller: 'ResultController', action: 'hello' }

另外,可以在routing前面指定request method:

'POST /test/:data': 'Result.hello'

或是用萬用字元處理:

'POST /test/*': 'Result.hello'

Sails - api/controllers/ResultController.js

module.exports = {
  hello: function(req, res) {
    return res.send(JSON.stringify({data: '123'}));
  }
}

除果希望抓到routing所傳入的參數,可以透過req.params['param_name']的方式來抓:

module.exports = {
  hello: function(req, res) {
    return res.send(JSON.stringify({data: req.params.data}));
  }
}

資料與頁面樣板整合

一般我們會在Controller中去存取資料庫資料,然後再帶到頁面去做rendering,在Sails可以這樣做:

Sails - api/controllers/ResultController.js

module.exports = {
  hello: function(req, res) {
    var data = req.params.data;
    res.view('result', {data: data});
  }
}

其中res.view()的第一個參數是頁面樣板的名稱,通常我們放在views資料夾中;第二個參數就是我們帶入的資料...

Sails - views/result.js

頁面的資料存取,則以ejs的語法即可,例如上面傳入的json中有個data,這邊就可以直接用data來接值...

The data is: <%- data %>

參考

results matching ""

    No results matching ""