2015-06-04 25 views
3

我對Node一般來說還是有點新的,所以我很抱歉,如果這不是問題。我的設置是Sailsjs + MongoDB。如何使用參數過濾Sailsjs的數據庫對象

我有一個RESTful API控制器設置來處理我的數據庫中的「實驗室」集合。

以下是我在我的控制器使用拉起這個集合中的所有對象時/實驗室用於/:

index: function (req, res, next) { 
    Lab.find(function foundLabs(err, labs) { 
    if (err) return next(err); 
     res.view({ 
     labs: labs 
     }); 
    }); 
}, 

在此集合也有對「網站」和「實驗場「我希望能夠過濾用什麼樣PARAMS顯示出來:

/實驗室/:網站

/實驗室/:網站/:實驗室

所以,如果「/實驗室/含水」拉起它會得到在AQ站點中的所有對象,如果「/實驗室/ AQ/123」被拉高,將得到123的對象在AQ站點的實驗室。

我知道這可能會與Lab.find函數完成,但我一直沒能找到任何文件,這給我一個答案,我正在尋找。

任何幫助,將不勝感激。

回答

1

在你config/routes.js文件,你需要添加路由使用可選參數:

'/findLabs/:site?/:lab?': 'LabController.findLabs' 
// use a different route than 'lab' to avoid interfering with the blueprint routes 

然後,在你LabController.js,如果請求的URL有site和/或lab,你會發現他們在req.params

// when a request is sent to '/findLabs/aq/123': 

findLabs: function(req, res, next) { 
    sails.log(req.params) // {site: 'aq', lab: '123'} 

    // you can use them to filter: 
    var query = Lab.find(); 

    if (req.params.site) query.where({site: req.params.site}); 
    if (req.params.lab) query.where({lab: req.params.lab}); 

    query.exec(function(err, labs) { 
     if (err) return res.serverError(); 

     res.json(labs); 
    }); 
} 
相關問題