2013-02-25 44 views
0

我想创建一个快速路由来创建一个将其查询参数传递给Mongoose查询的RESTful url。像这样(不工作)的代码映射URL的限制和排序参数,否则使用默认值。该网址是:如何将Mongoose/MongoDB查询作为快速路由公开

为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); 
}); 

} 

我只知道如何查询参数传递给像查找单个方法()和sort()没有以更自动的方式映射这一点。或者,我正在尝试用RESTful API做一个坏主意?我正在使用Mongoose,但是如果有帮助,我会对使用本机驱动程序的解决方案感兴趣。

回答

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方法,很多的选项传递通过直接向节点.js本地驱动程序,因此对于像sort这样的内容,请参阅本机find docs。如您所见,sort的格式不利于在URL参数中提供。

它只是暴露对特定选项的支持,然后单独从req.query中单独提取,而不是使用extend,但这两种方法都可以工作,这样更安全。

+0

真的吗?我试过了,这些选项似乎对查询没有任何影响。我试图找到关于此的文档,但无法找到它。你能指点我吗? – 2013-02-25 19:50:10

+0

@ 0x80它确实有效,但您必须使用正确格式的选项数据,这通常是本机格式,而不是猫鼬格式。查看更新的答案。 – JohnnyHK 2013-02-25 21:35:05

+0

感谢它的工作! – 2013-02-26 15:16:03