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