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({ ... }),
        }],
      })
  )
})