Joi数组验证,基于另一个字段值强制至少一个项
我有下面的验证块Joi数组验证,基于另一个字段值强制至少一个项,joi,Joi,我有下面的验证块 // 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.bo
// 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()
}
},
当private标志为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()})
但这不起作用
要验证它吗?
感谢您的反馈您的验证格式有点奇怪,因此我假设您希望验证整个请求对象。e、 g
{
createResource: {
body: {
permissions: [{...}, {...}],
private: false
}
}
}
但如果我想错了,你仍然可以找出工作点
我不建议将POJO与Joi
对象混合使用。您的示例的问题是Joi
不知道权限
和私有
密钥与同一对象相关。要解决这个问题,您需要像这样为整个请求对象编写一个模式
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()
})
})
});
因此,当
private
为true
时,这将验证true
(不需要权限)
当private
为false
且没有权限时,false
…和true
当private
为false
且权限
正确填充时
非常感谢!我必须更深入地了解Toi。。。似乎是一个强大的工具我在图片中使用的工具链接在我的答案底部。可以找到源代码。