Javascript 具有不同模式的对象数组-JOI
我的应用程序当前具有以下架构:Javascript 具有不同模式的对象数组-JOI,javascript,hapijs,joi,Javascript,Hapijs,Joi,我的应用程序当前具有以下架构: Joi.object().keys({ users: Joi.array().items(mySchema) }) 因此,我可以获得一组用户并对其进行验证。 但是现在我需要为每个对象使用不同的模式 有没有一种方法可以让我这样做: Joi.object().keys({ users: [ Joi.object().keys(mySchemaForUserOne), Joi.object().keys(mySchemaForUserTwo),
Joi.object().keys({
users: Joi.array().items(mySchema)
})
因此,我可以获得一组用户并对其进行验证。
但是现在我需要为每个对象使用不同的模式
有没有一种方法可以让我这样做:
Joi.object().keys({
users: [
Joi.object().keys(mySchemaForUserOne),
Joi.object().keys(mySchemaForUserTwo),
// ...
]
})
您可以通过列出所有允许的类型来使用
array.items
。如果给定类型为.required()
,则数组中必须有匹配项:
给你~
Joi.object().keys({
users: Joi.array().items(
Joi.alternatives()
.conditional('.type', {
switch: [{
is: 'mySchemaForUserOne',
then: Joi.object({ ... }),
}, {
is: 'mySchemaForUserTwo',
then: Joi.object({ ... }),
}],
})
)
})
您可以在此处查看文档=>
不确定原因,但这并没有达到预期效果。我正在发送[userOne,userTwo]以根据此模式进行验证,它们都通过第一个选项进行验证,即
Joi.object().keys(myschemaforusioner.required()
Joi.object().keys({
users: Joi.array().items(
Joi.alternatives()
.conditional('.type', {
switch: [{
is: 'mySchemaForUserOne',
then: Joi.object({ ... }),
}, {
is: 'mySchemaForUserTwo',
then: Joi.object({ ... }),
}],
})
)
})