首页 > 解决方案 > 在外部属性上使用 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' 属性。知道如何检查吗?

标签: joi

解决方案


您可以使用上下文

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)}}); 

推荐阅读