验证时嵌套 Joi

ml-*_*ner 4 javascript validation node.js joi

我正在尝试根据父级中的值有条件地验证嵌套对象。

const schema = Joi.object({
    a: Joi.string(),
    b: Joi.object({
        c: Joi.when(Joi.ref('..a'), { is: 'foo', then: Joi.number().valid(1), otherwise: Joi.number().valid(2) }),
    }),
});

const obj = {
    a: 'foo',
    b: {
        c: 2,
    },
};
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想要得到一个错误,即 c 必须为 1,但验证通过了。我尝试过有参考文献和没有参考文献的情况,但我显然一定是误解了 Joi 工作原理的一些基本原理。有什么帮助吗?

abo*_*eep 8

.您的通话中还需要一个Joi.ref()..将上升到父树,然后另一个点表示属性。因此,对于您的情况,它将交给父母,..然后获得财产parent.a

使用Joi 游乐场这对我有用:

Joi.object({
    a: Joi.string(),
    b: Joi.object({
        c: Joi.when(Joi.ref('...a'), {
            is: 'foo',
            then: Joi.number().valid(1),
            otherwise: Joi.number().valid(2)
        })
    })
})
Run Code Online (Sandbox Code Playgroud)