如何解决有数组元素时的 Joi 验证
我想使用 Joi 实现以下验证。
我的架构:
const schema = Joi.object({
createdDate: Joi.string().required(),futureDate: Joi.string().allow("").optional(),Events: Joi.array().items({
status: Joi.string().required(),type: Joi.string().required()
})
});
我的输入请求将是这样的。我正在使用上述架构和验证来验证以下请求。如果 Events.type == "XYZ"
则 futureDate
是必需的,否则它是可选的。
{
"createdDate": "2021-02-02T00:00:00","futureDate": "2021-02-02T00:00:00","Events": [
{
"status": "P","type": "ABC"
},{
"status": "S","type": "XYZ"
}
]
}
解决方法
Joi.object({
createdDate: Joi.string().required(),futureDate: Joi.string().allow("").optional(),Events: Joi.array().items({
status: Joi.string().required(),type: Joi.string().required()
})
}).when(Joi.object({ Events: Joi.array().items({
status: Joi.string().required(),type: Joi.string().required()
})
.required()
.has(Joi.object({ status: Joi.string(),type: 'XYZ' })) }).unknown(),{
then: Joi.object({ futureDate: Joi.required() })
})
我们在这里“说”的是,当 Events
数组存在并且至少包含一个带有 type: 'XYZ'
的元素时,则需要 futureDate
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。