如何解决如何基于Joi验证器中对象外部的字段进行条件验证
我有一个如下所示的验证架构:
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,})
});
所以我想做的是根据“countryWhereTheEmploymentHeld”的值验证“地区”。如果“countryWhereTheEmploymentHeld”的值是“Local”,那么我希望该区域是必需的()。否则我不希望它是必需的()。我可以在 Joi 验证器中做到这一点。
解决方法
您的 employerAddress
对象是可选的,这意味着您的 when
验证仅在您发送 employerAddress
对象时有效。要强制将 employerAddress
与 employerAddress.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()
})
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。