Mục tiêu của tôi là tạo một chỉ mục chỉ số cho bài đăng. Người dùng có thể chỉ định một số thông số truy vấn (ví dụ: thẻ, loại) nhưng không thể chỉ định các thông số khác. Để làm rõ:Hapijs và Joi: xác thực thông số truy vấn với sự hiện diện: 'bị cấm'
Đây là okay:
/posts
/posts?tags=food
/posts?type=regular&tags=stackoverflow
Đây không phải là okay:
/posts?title=Hello
Đây là gói HAPI config:
servers: [
{
host: 'localhost',
port: 3000,
options: {
labels: ["api"],
validation: {
abortEarly: false,
presence: 'forbidden'
}
}
}
],
Xin lưu ý tùy chọn presence: forbidden
.
Đây là tuyến đường config:
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()
}
}
Ý tưởng của tôi là xác nhận sẽ cho phép bất kỳ tập hợp con của type
và tags
params (bao gồm cả truy vấn trống). Tuy nhiên, sau khi thực hiện bất kỳ yêu cầu được phép nào, tôi nhận được một lỗi sau:
{
"statusCode": 400,
"error": "Bad Request",
"message": "value is not allowed",
"validation": {
"source": "query",
"keys": [
"value"
]
}
}
Tại sao lại như vậy? Tất nhiên, không có khóa nào có tên là value
. Làm cách nào để xác thực hoạt động theo cách tôi muốn?
Cảm ơn bạn! Câu trả lời này đã xóa một vài câu hỏi khác mà tôi đã có. Có vẻ như những gì tôi thực sự muốn là thiết lập toàn cầu là sự hiện diện: 'bắt buộc'. Tôi đã không nhận ra rằng thiết lập 'cấm' là nghiêm ngặt. – zir