如何将Mongoose / MongoDB查询公开为Express路由

时间:2013-02-25 19:09:52

标签: mongodb rest express mongoose

我想创建一个快速路由,用于创建将其查询参数传递给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,但如果有帮助,我会对使用本机驱动程序的解决方案感兴趣。

1 个答案:

答案 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,这样更安全,但无论哪种方式都可以。