node.js - 如何通过 Sailsjs 使用参数过滤数据库对象

标签 node.js mongodb sails.js

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

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

这是我在使用 /lab/ 时在我的 Controller 中提取该集合中所有对象的方法:

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 和/或 lab,您将在 中找到它们>请求参数:

// 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 - 如何通过 Sailsjs 使用参数过滤数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655114/

相关文章:

node.js - Sequelize 方言问题

mysql - NodeJS -> 错误无法读取未定义的属性 'length'

node.js - 如何使用 Node.js 控制 Cloud PubSub 中的确认

node.js - Mongoose 嵌入文档预保存

mysql - sails js 实时电子商务和库存应用的推荐数据库

node.js - 防止 Sails.js 处理错误

node.js - 使用 Node JS 将数据解密为 JSON 时如何解决解密错误?

mongodb - 使用 MongoDB 聚合框架的自定义管道运算符

mongodb - Mongodb条件查询

javascript - Sails.js websockets 在本地主机上工作但在我部署到 Openshift 后不工作