1

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

myhost/processes?limit=20&sort=-modified

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,但如果有帮助,我会对使用本机驱动程序的解决方案感兴趣。

4

1 回答 1

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文档。如您所见, 的格式sort不利于在 URL 参数中提供。

req.query只公开对特定选项的支持,然后单独从而不是使用中提取这些选项更安全extend,但任何一种方式都可以工作。

于 2013-02-25T19:26:08.887 回答