使用 when() 对外部属性进行 Joi 验证

问题描述

我有这样的事情:

let someCoolString = 'mememe';
const schema = Joi.object({
  someFieldName: Joi.string()
    .when(someCoolString,{
      is: "mememe",then: Joi.required(),otherwise: Joi.forbidden(),})
});

但这显然不起作用,因为 someCoolString 不是 Joi.object属性。知道如何检查吗?

解决方法

您可以使用context

const schema = Joi.object().keys({
    someFieldName: Joi.number().when('$condition',{
        is: Joi.boolean().valid(true).required(),then: Joi.required(),otherwise: Joi.forbidden()
    })
});

let someCoolString = 'mememe';
let someCoolString2 = 'not_meme';

function isMeme(str) {
   return str == 'mememe'
};

// error: null
schema.validate({}); 
// someFieldName required
schema.validate({},{context: {condition: isMeme(someCoolString)}}); 
// someFieldName forbidden
schema.validate({ someField: 10 },{context: {condition: isMeme(someCoolString2)}});