【问题标题】:Joi validations when there is an array elements存在数组元素时的 Joi 验证
【发布时间】:2021-07-23 03:12:24
【问题描述】:

我想使用 Joi 实现以下验证。

我的架构:

const schema = Joi.object({
   createdDate: Joi.string().required(),
   futureDate: Joi.string().allow("").optional(),
   Events: Joi.array().items({
      status: Joi.string().required(),
      type: Joi.string().required()       
   })
});

我的输入请求将是这样的。我正在使用上述架构和验证验证以下请求。如果Events.type == "XYZ"futureDate 是必需的,否则它是可选的。

   {
            "createdDate": "2021-02-02T00:00:00",           
            "futureDate": "2021-02-02T00:00:00",
            "Events": [
                {
                    "status": "P",
                    "type": "ABC"
                },
                {
                    "status": "S",
                    "type": "XYZ"
                }            
                
            ]
   }

【问题讨论】:

    标签: typescript joi


    【解决方案1】:

    您必须将.when.has 结合起来:

    Joi.object({
       createdDate: Joi.string().required(),
       futureDate: Joi.string().allow("").optional(),
       Events: Joi.array().items({
          status: Joi.string().required(),
          type: Joi.string().required()       
       })
    }).when(Joi.object({ Events: Joi.array().items({
        status: Joi.string().required(),
        type: Joi.string().required()       
      })
      .required()
      .has(Joi.object({ status: Joi.string(), type: 'XYZ' })) }).unknown(), {
           then: Joi.object({ futureDate: Joi.required() })
    })
    

    我们在这里“说”的是,当Events 数组存在并且包含至少一个带有type: 'XYZ' 的元素时,那么futureDate 是必需的。

    【讨论】:

    • 这将始终显示 createdDate required 即使类型不是 'XYZ'。但我需要 if type != 'XYZ' then createdDate 应该是可选的。
    • 您是指futureDate 吗?我刚刚更新了帖子。你能再试一次吗?
    • 现在也一样,当类型:'XYZ'时,它不是说futureDate是强制性的
    • 我用这个数据测试了{ createdDate: '123', Events: [{ status: '123', type: 'XYZ' }] },它说Validation Error: "futureDate" is required。您能否提供一个它不起作用的示例?
    • const 验证 = schema.validate(data); // 数据是输入数据
    猜你喜欢
    • 2021-02-05
    • 2017-07-28
    • 2021-10-02
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多