我一直在尝试实现以下 joi 验证。
joiSchema = Joi.object().keys({
taskno: Joi.string().alphanum().required().uppercase().trim(),
taskstatus: Joi.valid('G', 'C', 'I', 'S'),
taskpriority: Joi.number().integer().max(5).min(1),
stuckreason: Joi.string().allow('').max(200).trim(),
dttarget: Joi.date().iso(),
dtdue: Joi.date().iso(),
dtcomplete: Joi.when('taskstatus', {
is: Joi.valid('C', 'I'),
then: Joi.date().iso().required(),
})
});
我的对象包含taskno、dttarget 和dtdue,我只想验证这一点。
如果我 joi.validate()
对象,它会返回错误“dtcomplete is required”。
有没有办法选择性地检查“dtcomplete”
最佳答案
尝试 dtcomplete
的条件以及exist()
在Joi
所以代码如下
joiSchema = Joi.object().keys({
taskno: Joi.string().alphanum().required().uppercase().trim(),
taskstatus: Joi.valid('G', 'C', 'I', 'S'),
taskpriority: Joi.number().integer().max(5).min(1),
stuckreason: Joi.string().allow('').max(200).trim(),
dttarget: Joi.date().iso(),
dtdue: Joi.date().iso(),
dtcomplete: Joi.when('taskstatus', {
is: Joi.exist().valid('C', 'I'),
then: Joi.date().iso().required(),
})
});
唯一的区别在于 is: Joi.exist().valid('C', 'I'),
关于javascript - Joi 验证 - 如何根据输入使字段可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58933555/