我对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”的字段,我希望能够过滤出与params一样的内容:
/实验室/:站点
/实验室/:网站/:实验室
因此,如果拉出“ / lab / aq ”,它将获取AQ站点中的所有对象,并且如果“ / lab / aq / 123 ”被拉起它将获得AQ站点中123实验室的对象。
我知道这可能会通过 Lab.find 功能完成,但我找不到任何能够给我答案的文档。
任何帮助都将不胜感激。
答案 0 :(得分:1)
在config/routes.js
文件中,您需要添加带有可选参数的路线:
'/findLabs/:site?/:lab?': 'LabController.findLabs'
// use a different route than 'lab' to avoid interfering with the blueprint routes
然后,在LabController.js
中,如果请求的网址有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);
});
}