我一直在尝试实现以下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”。有没有一种方法可以选择检查“ 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/