我的目标是为帖子创建一个索引路由。用户应该能够指定一些查询参数(即标签、类型),但不能指定其他参数。澄清:
这没关系:
/posts
/posts?tags=food
/posts?type=regular&tags=stackoverflow
这是不行的:
/posts?title=Hello
这是 hapi 包配置:
servers: [
{
host: 'localhost',
port: 3000,
options: {
labels: ["api"],
validation: {
abortEarly: false,
presence: 'forbidden'
}
}
}
],
请注意presence: forbidden
选项。
这是路由配置:
handler: function (request, reply) {
Post.find(request.query, function (err, posts) {
if(err) {
console.log(err);
}
reply(posts);
});
},
validate: {
query: {
type: Joi.string().optional(),
tags: Joi.string().optional()
}
}
我的想法是验证应该允许任何子集type
和tags
参数(包括空查询)。但是,在发出任何允许的请求后,我收到以下错误:
{
"statusCode": 400,
"error": "Bad Request",
"message": "value is not allowed",
"validation": {
"source": "query",
"keys": [
"value"
]
}
}
这是为什么?当然没有键名value
。如何使验证按照我想要的方式进行?