一般来说,我对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/