[英]Joi validation - how to make a field optional based on input
I've been trying to implement the following joi validation.我一直在尝试实现以下 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(),
})
});
My object contains taskno, dttarget and dtdue and I only want to validate this.我的 object 包含 taskno、dttarget 和 dtdue,我只想验证这一点。
If i joi.validate()
object it returns error "dtcomplete is required" .如果我
joi.validate()
object 它返回错误"dtcomplete is required" 。
Is there a way to optionally check "dtcomplete"有没有办法选择检查“dtcomplete”
Try the condition for dtcomplete
along with exist()
in Joi
在
Joi
中尝试dtcomplete
和 exists exist()
的条件
So the code will be like below所以代码将如下所示
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(),
})
});
Only the difference is at is: Joi.exist().valid('C', 'I'),
唯一的区别在于
is: Joi.exist().valid('C', 'I'),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.