我有以下验证块
// POST /api/resources
createResource: {
body: {
.... require at least 1 item
permissions: Joi.array().items(Joi.object().keys({
level: Joi.string(),
level_id: Joi.string().hex(),
canWrite: Joi.boolean()
})),
private: Joi.boolean().required()
}
},
当私有标志为false时,我想要权限中至少有1项 根据之前的问题(使用includes()而不是items()),我应该使用类似的东西:
permissions: Joi.array().items(Joi.object().keys({
level: Joi.string(),
level_id: Joi.string().hex(),
canWrite: Joi.boolean()
})).when('private'{is:false,then:Joi.required()})
但这不起作用 无论如何要验证它? 感谢您的反馈
答案 0 :(得分:2)
您的验证格式有点奇怪,所以我假设您要验证整个请求对象。 e.g。
{
createResource: {
body: {
permissions: [{...}, {...}],
private: false
}
}
}
但如果我认为错了,你仍然可以选择工作位。
我不建议将POJO与Joi
个对象混合使用。您的示例的问题是Joi
不知道permissions
和private
键与同一对象相关。要解决此问题,您需要为此类整个请求对象编写架构。
Joi.object().keys({
createResource: Joi.object().keys({
body: Joi.object().keys({
permissions: Joi.array().items(
Joi.object().keys({
level: Joi.string(),
level_id: Joi.string().hex(),
canWrite: Joi.boolean()
})).when('private', {is: false, then: Joi.required()}),
private: Joi.boolean().required()
})
})
});
因此,当true
为private
时,这将验证true
(无权限)
false
为private
并且没有权限时 ... false
true
为private
且false
填充正确时, ..和permissions
。