如何最好地将URL查询参数从hapi传递到Mongoose

如何最好地将URL查询参数从hapi传递到Mongoose,mongoose,hapijs,Mongoose,Hapijs,我有一个hapi服务器,通过mongoose连接到mongodb,还有一个简单的模型,例如用户 我想启用用户筛选,例如 User.find(req.query, function () {...}); 其中,req.query将从URL解析,如下所示: {count: {$gt: 10, $lt: 100}} 如果有现成的东西,有人能建议使用查询解析器库和URL参数语法的哪种组合吗 这似乎应该是一个比较常见的问题,但我一直无法找到现有的解决方案 编辑: 当然,我想要一个通用的解决方案,避免

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

我想启用用户筛选,例如

User.find(req.query, function () {...});
其中,
req.query
将从URL解析,如下所示:

{count: {$gt: 10, $lt: 100}} 
如果有现成的东西,有人能建议使用查询解析器库和URL参数语法的哪种组合吗

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

编辑:


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

您可以这样做:

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查询准则,但实际上不需要框架

你可以这样做:

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查询准则,但实际上不需要框架

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

在使用Joi时,如果任何参数检查失败,则在调用route handler函数之前将返回错误响应。简单的例子:

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);
        });

    }
};
也可以查看上的页面。这是一个很好的分解它是如何运作的

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

在使用Joi时,如果任何参数检查失败,则在调用route handler函数之前将返回错误响应。简单的例子:

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);
        });

    }
};
也可以查看上的页面。这是一个很好的分解它是如何运作的