【问题标题】:Joi validation - how to make a field optional based on inputJoi 验证 - 如何根据输入使字段可选
【发布时间】:2020-03-14 22:38:58
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    Joi 中尝试dtcompleteexist() 的条件

    所以代码如下所示

    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'),

    【讨论】:

      猜你喜欢
      • 2019-10-18
      • 2015-10-17
      • 2019-05-01
      • 2019-10-15
      • 2021-12-11
      • 1970-01-01
      • 2012-06-14
      • 2020-03-14
      相关资源
      最近更新 更多