外部属性上with when()的Joi验证

外部属性上with when()的Joi验证,joi,Joi,我有这样的想法: let someCoolString = 'mememe'; const schema = Joi.object({ someFieldName: Joi.string() .when(someCoolString, { is: "mememe", then: Joi.required(), otherwise: Joi.forbidden(), }) }); 但是这显然不起作用,因为someCool

我有这样的想法:

let someCoolString = 'mememe';
const schema = Joi.object({
  someFieldName: Joi.string()
    .when(someCoolString, {
      is: "mememe",
      then: Joi.required(),
      otherwise: Joi.forbidden(),
    })
});
但是这显然不起作用,因为
someCoolString
不是
Joi.object
的属性。您知道如何检查它吗?

您可以使用:

宾果,OP不仅可以使用上下文,而且OPs的问题100%完全是上下文的用途。
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)}});