我试图期待一个类似于以下对象的对象,其中仅当未发送主对象时才允许数据。
{
"action": {
"primary": "",
"data": {}
}
}
我尝试过以下模式:
Joi.object({
action: Joi.object({
primary: Joi.any(),
data: Joi.any(),
})
.when(Joi.object({
action: Joi.object({
primary: Joi.exist()
})
}), {
then: Joi.object({
primary: Joi
.string()
.required(),
data: Joi.any().forbidden()
}),
otherwise: Joi.object({
primary: Joi.any().forbidden(),
data: Joi.object()
.required()
})
})
});
它总是进入我的otherwise
语句中。其他语法也总是失败:.when('primary', { is: Joi.exist(), then:
当我尝试.when('action.primary', { is: Joi.exist(), then:
时,Joi自身会因AssertionError [ERR_ASSERTION]: Item cannot come after itself: action
而出错
答案 0 :(得分:0)
我可以建议以下重构吗?
Joi.object({
action: Joi.object({
primary: Joi.string(),
data: Joi.object().when("primary", {
is: Joi.exist(),
then: Joi.forbidden(),
otherwise: Joi.required()
})
})
});
它允许这两个对象:
{
action: {
data: {}
}
};
{
action: {
primary: "value"
}
};
注意:https://github.com/legraphista/joi-tester是一个很酷的项目,用于在不设置应用程序的情况下验证Joi配置。