如何通过 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);
});
}
总的来说,我对 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);
});
}