【问题标题】:How to do conditional validation based on a field outside of object in Joi validator如何在 Joi 验证器中基于对象之外的字段进行条件验证
【发布时间】:2021-07-29 23:38:45
【问题描述】:

我有一个如下所示的验证架构:

const createdJobOpportunitySchema = Joi.object({
        countryWhereTheEmploymentHeld: Joi.string().valid('Local', 'Forign').required(),
        employerAddress: Joi.object({
            region: Joi.when('countryWhereTheEmploymentHeld', {
                is: Joi.string().valid('Local'),
                then: Joi.string().required(),
            }),
            zone: Joi.string().custom(mongoObjectIdValidator, 'Region Validator'),
            district: Joi.string().custom(mongoObjectIdValidator, 'Region Validator'),
        })
    });

所以我想做的是根据“countryWhereTheEmploymentHeld”的值验证“区域”。如果“countryWhereTheEmploymentHeld”的值为“Local”,那么我希望该区域是必需的()。否则我不希望它是必需的()。我可以在 Joi 验证器中做到这一点。

【问题讨论】:

    标签: validation joi


    【解决方案1】:

    您的employerAddress 对象是可选的,这意味着您的when 验证仅在您发送employerAddress 对象时有效。要强制将 employerAddressemployerAddress.region 放在一起,您必须将 .when 放在对象之外:

    Joi.object({
      countryWhereTheEmploymentHeld: Joi.string().valid('Local', 'Forign').required(),
      employerAddress: Joi.object({
        region: Joi.string()
      }),
      zone: Joi.string(),
      district: Joi.string()
    }).when(Joi.object({ countryWhereTheEmploymentHeld: Joi.valid('Local') }).unknown(), {
       then: Joi.object({ 
         employerAddress: Joi.object({
           region: Joi.required()
         }).required() 
       })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-21
      • 2018-01-18
      • 1970-01-01
      • 2011-08-27
      • 2019-04-30
      • 2019-01-20
      • 1970-01-01
      • 2020-05-08
      相关资源
      最近更新 更多