如何使用params使用Sailsjs过滤数据库对象

时间:2015-06-04 22:14:04

标签: node.js mongodb sails.js

我对Node一般还是有点新手,所以如果这是noob问题,我很抱歉。我的设置是Sailsjs + MongoDB。

我设置了一个RESTful API控制器来处理我的数据库中的“lab”集合。

当我使用 / lab / 时,我在控制器中使用以提取此集合中的所有对象:

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

在这个集合中有“site”和“lab”的字段,我希望能够过滤出与params一样的内容:

  

/实验室/:站点

     

/实验室/:网站/:实验室

因此,如果拉出“ / lab / aq ”,它将获取AQ站点中的所有对象,并且如果“ / lab / aq / 123 ”被拉起它将获得AQ站点中123实验室的对象。

我知道这可能会通过 Lab.find 功能完成,但我找不到任何能够给我答案的文档。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

config/routes.js文件中,您需要添加带有可选参数的路线:

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

然后,在LabController.js中,如果请求的网址有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);
    });
}