【问题标题】:How to expose a Mongoose / MongoDB query as an Express route如何将 Mongoose / MongoDB 查询公开为 Express 路由
【发布时间】:2013-02-11 01:03:33
【问题描述】:

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

【问题讨论】:

    标签: mongodb rest express 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 方法中,并且许多选项直接传递给 node.js 原生驱动程序,因此对于 sort 之类的内容,请参阅原生 find docs。如您所见,sort 的格式不利于在 URL 参数中提供。

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

    【讨论】:

    • 真的吗?我试过了,这些选项似乎对查询没有任何影响。我试图找到这方面的文档,但也找不到。你能指点我吗?
    • @0x80 它确实有效,但是您必须为选项数据使用正确的格式,这通常是本机格式,而不是猫鼬形式。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2022-01-22
    • 2015-07-22
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多