Joi 在验证时嵌套
Joi nested when validation
我正在尝试根据父项中的值有条件地验证嵌套对象。
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,
},
};
在这个例子中,我想得到一个c必须为1的错误,但是验证通过了。我尝试过使用和不使用参考文献,但显然我一定是误解了有关 Joi 工作原理的一些基本知识。有帮助吗?
您的 Joi.ref()
通话中还需要一个 .
。 ..
将上升到父树,然后另一个点表示 属性。因此,对于您的情况,它将转到父级 ..
然后获得 a 属性 parent.a
使用 Joi playground 这对我有用:
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 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,
},
};
在这个例子中,我想得到一个c必须为1的错误,但是验证通过了。我尝试过使用和不使用参考文献,但显然我一定是误解了有关 Joi 工作原理的一些基本知识。有帮助吗?
您的 Joi.ref()
通话中还需要一个 .
。 ..
将上升到父树,然后另一个点表示 属性。因此,对于您的情况,它将转到父级 ..
然后获得 a 属性 parent.a
使用 Joi playground 这对我有用:
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)})
})
})