我想创建一个快速路由,用于创建将其查询参数传递给Mongoose查询的RESTful URL。像这样(不工作)的代码映射限制和排序参数从URL,否则使用默认值。网址将是:
为myhost /过程限制= 20&安培;排序=修饰
exports.find = function(req, res) {
var options = {
limit : 100,
sort: '-created'
};
_(options).extend(req.query);
Process.find(options, function(err, process) {
res.send(process);
});
}
我只知道如何将查询参数传递给find()和sort()这样的单个方法,而这些方法无法以更自动的方式映射它。或者我正在尝试在RESTful api方面做一个坏主意?我正在使用Mongoose,但如果有帮助,我会对使用本机驱动程序的解决方案感兴趣。
答案 0 :(得分:1)
假设您正在使用下划线库的extend
,您可以这样做:
exports.find = function(req, res) {
var options = {
limit : 100,
sort: {created: -1}
};
_.extend(options, req.query);
Process.find({}, null, options, function(err, process) {
res.send(process);
});
}
options
参数将传递到Query#setOptions
方法,并且许多选项会直接传递给node.js本机驱动程序,因此对于像sort
这样的参数,请参阅原生find
docs。如您所见,sort
的格式不利于在URL参数中提供。
仅展示对特定选项的支持,然后从req.query
单独提取而不是使用extend
,这样更安全,但无论哪种方式都可以。