【问题标题】:REST method GET for searching by criteria as json fro mongodbREST 方法 GET 用于从 mongodb 按条件搜索为 json
【发布时间】:2014-10-09 21:30:07
【问题描述】:

我有一个带有 express 和 mongoose 的 nodejs 服务器,我想根据我想作为 JSON 对象提供的标准使用方法 GET 进行搜索,有人可以帮助我如何实现它吗?

或者也许我应该使用 POST 或 PUT 来制作它?

【问题讨论】:

  • 那么,你想要的是 GET、PUT 还是 POST?
  • 对我来说 POST - 用于添加新对象 PUT 用于更新 GET 用于获取这就是我的理解,但我不确定在 GET 中我可以提供 json 查询作为正文等。
  • @Robert 你不能提供 json 查询,但你可以提供搜索查询。例如http://hostname.com/modelname?field=2&another_param=3 并在您的快速路由器中处理它
  • @AndrewVolchenko 你能给我举个例子吗?

标签: node.js mongodb rest express mongoose


【解决方案1】:

http://hostname/modelname?criteria1=1&criteria2=2

router.route('/modelname')
    .get(function (req, res, next) {
        req.query.criteria1 === 1 // true
        req.query.criteria2 === 2 // true
     });

【讨论】:

    【解决方案2】:

    如果您不确定要使用什么 HTTP VERB,

    POST - is primarily used for creating resources on the server
    
    PUT - is used to update an existing resource
    
    GET- to retrieve a resource
    

    在这种情况下我会使用 GET

    GET http://myhost.com?q=word1+word2+word3+word4
    
    app.get('*', function(req, res) {
       // do something with the req.query.q array
    });
    

    【讨论】:

      【解决方案3】:

      您有两个选择 - 使用 HTTP GET 参数或将整个条件编码为 JSON 字符串并传递该字符串。

      第一个选项,使用参数:

      ?crit[foo.bar][$eq]=abc&crit[foo.baz][$ne]=def
      

      您可以通过req.query.crit 在 nodejs/express 中阅读它。但这是个坏主意,因为没有办法保留数据类型。例如数字1 变成字符串"1"。不要使用它 - MongoDB 对数据类型敏感,因此查询 {"foo.bar":{$eq:1}}{"foo.bar":{$eq:"1"}} 完全不同

      第二个选项是对 JSON 标准进行 urlencode:

      ?critJSON=%7B%22foo.bar%22%3A%7B%22%24eq%22%3A%20%22abc%22%7D%2C%22foo.baz%22%3A%7B%22%24ne%22%3A%20%22def%22%7D%7D
      

      并在 nodejs/express 端解析它:

      var crit = JSON.parse(req.query.critJSON)
      

      这样您的数据类型将被保留,并且可以按预期工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多