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

How to use params to filter database objects with Sailsjs

总的来说,我对 Node 还是有点陌生​​,如果这是一个菜鸟问题,我很抱歉。我的设置是 Sailsjs + MongoDB.

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

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

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

在此集合中有“站点”和“实验室”字段,我希望能够过滤显示的参数,例如:

/lab/:site

/lab/:site/:lab

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

我知道这可能会通过 Lab.find 函数来完成,但我一直没能找到任何能给我答案的文档 我是寻找。

如有任何帮助,我们将不胜感激。

在您的 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 and/or 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);
    });
}