Моя цель — создать маршрут index для сообщений. Пользователь должен иметь возможность указать некоторые параметры запроса (например, теги, тип), но не должен иметь возможность указывать другие. Чтобы уточнить:
Это нормально:
/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
, конечно же, нет. Как заставить проверку вести себя так, как я хочу?