【问题标题】:How to best pass URL query params from hapi to Mongoose如何最好地将 URL 查询参数从 hapi 传递到 Mongoose
【发布时间】:2016-07-27 17:54:18
【问题描述】:

我有一个 hapi 服务器,通过 mongoose 连接到 mongodb,以及一个简单的模型,例如用户。

我想启用用户过滤,例如

User.find(req.query, function () {...});

req.query 将从 URL 中解析出来,类似于:

{count: {$gt: 10, $lt: 100}} 

如果有任何现成可用的东西,任何人都可以建议使用查询解析器库和 URL 参数语法的组合吗?

这似乎应该是一个比较常见的问题,但我一直无法找到现有的解决方案...

编辑:

当然,我想要一个通用的解决方案,并且避免为每个模型手动解析一组固定的参数。

【问题讨论】:

    标签: mongoose hapijs


    【解决方案1】:

    您可以使用Joi 来验证查询参数。它很容易与 Hapi 集成。并且不需要添加任何特殊的查询字符串解析。参数在 request.query 对象上可用。您可以通过request.params 对象访问path parameters

    当您使用 Joi 时,如果任何参数检查失败,将在调用路由处理函数之前返回错误响应。简单示例:

    var User = require('./UserModel');
    var joi = require('joi');
    
    var getUsersRoute = {
        method: 'GET',
        path: '/users/{user_id?}',
        config: {
            validate: {
                params: {
                    user_id: joi.number().optional().default(null)
                },
                query: {
                    count: joi.number().min(10)
                }
            }
        },
        handler: function(request, reply) {
            if(request.params.user_id){
                /* do something with the id if you want to */
            }
    
            User.find(request.query, function(results) {
                reply(results);
            });
    
        }
    };
    

    还可以查看Validation 上的页面。这是它如何运作的一个很好的细分。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      var url = require('url');
      
      function(req,res){
      
        //parse query params using node url module
        //url is a core node module, no npm install needed
        var params = url.parse(req.url, true).query;
      
        //query database using params
        User.find({userId:params.userId})...
      
      }
      

      这将解析以下格式的端点:

      http://someApi.com?userId=MyId&param2=OtherParam...etc
      

      所需的代码量非常少,您可能需要稍微格式化参数以满足 mongoose 查询准则,但实际上不需要框架。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多