我一直在尝试实现以下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/

10-13 02:56