问题描述
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()
})
})