【问题标题】:Array of objects with different schemas - JOI具有不同模式的对象数组 - JOI
【发布时间】:2018-07-20 02:07:07
【问题描述】:

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

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

所以我可以获得一组用户并验证他们。 但是现在我需要为每个对象使用不同的模式。

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

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

【问题讨论】:

    标签: javascript hapijs joi


    【解决方案1】:

    给你~

    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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不知道为什么,但这并没有按预期工作。我正在发送 [userOne, userTwo] 以针对此架构进行验证,并且它们都通过第一个选项进行验证,即 Joi.object().keys(mySchemaForUserOne).required()
      猜你喜欢
      • 2020-01-12
      • 2020-03-27
      • 2021-05-14
      • 2019-09-05
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多