我有一台hapi服务器,通过mongoose连接到mongodb,还有一个简单的模型,例如:用户。
我想启用用户过滤功能,例如
User.find(req.query, function () {...});
其中req.query
将从URL解析,并且类似于:
{count: {$gt: 10, $lt: 100}}
任何人都可以建议使用哪种查询解析器库和URL参数语法组合,如果有任何可用的话?
这似乎应该是一个常见的问题,但我一直无法找到现有的解决方案...
编辑:
当然,我喜欢通用解决方案,并且避免为每个模型手动解析一组固定的参数。
答案 0 :(得分: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上的页面。它是如何运作的很好的细分。
答案 1 :(得分:-1)
你可以这样做:
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
所需的代码量非常少,您可能需要稍微格式化params以满足mongoose查询指南,但实际上并不需要框架。