一般来说,我对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”字段,我希望能够过滤显示的参数,如:
/实验室/:现场
/实验室/:现场/:实验室
因此,如果向上拉“/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和/或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);
    });
}

关于node.js - 如何使用params使用Sailsjs过滤数据库对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30655114/

10-09 17:46