具有不同架构的对象数组-JOI

时间:2018-07-20 02:07:08

标签: javascript hapijs joi

我目前在我的应用上具有以下架构:

Joi.object().keys({
  users: Joi.array().items(mySchema)
})

因此,我可以得到一系列用户并进行验证。 但是现在我需要为每个对象使用不同的架构。

有没有办法做类似的事情:

Joi.object().keys({
  users: [
    Joi.object().keys(mySchemaForUserOne),
    Joi.object().keys(mySchemaForUserTwo),
    // ...
  ]
})

2 个答案:

答案 0 :(得分:0)

您可以通过列出所有允许的类型来使用array.items。如果给定类型为.required(),则数组中必须有一个匹配项:joi API reference

users: Joi.array().items(Joi.object().keys(mySchemaForUserOne).required(),
                         Joi.object().keys(mySchemaForUserTwo).required(),
                         // ...)

答案 1 :(得分:0)

您在这里〜

Joi.object().keys({
  users: Joi.array().items(
    Joi.alternatives()
      .conditional('.type', {
        switch: [{
          is: 'mySchemaForUserOne',
          then: Joi.object({ ... }),
        }, {
          is: 'mySchemaForUserTwo',
          then: Joi.object({ ... }),
        }],
      })
  )
})

您可以在此处检查文档=> Joi conditional API