javascript - Joi 验证 - 如何根据输入使字段可选

标签 javascript node.js joi

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

相关文章:

javascript - 从唯一的串联变量中减去 1

javascript - 缓存控制和 Canvas 的访问控制问题

javascript - Bootbox 警报未显示在 Laravel View 中

javascript - 从不同的目录运行 Node 应用程序使静态文件夹变得有趣

javascript - 如何使用客户端传递的参数

javascript - 如何对 TypeScript 类执行 Joi 验证?

javascript - 为什么 Joi 使用 "contains a duplicate value"验证对象数组?

javascript - 客户端和服务器端编程有什么区别?

javascript - 从控制台提取 console.log 方法

node.js - Bookshelf.js 在创建新记录之前进行独特的电子邮件验证