NodeJS Joi validation -如何验证对象数组,其中只有一个对象是必需的,而另一个对象不是

yzuktlbb  于 2023-01-04  发布在  Node.js
关注(0)|答案(2)|浏览(216)

我想使用Joi验证一个包含多个对象的数组。尽管我找不到一种方法来标记数组列表中的一个对象为“required = false”。
有什么办法可以让伊做到这一点吗?

wqlqzqxt

wqlqzqxt1#

试试这边

Joi.array().items(Joi.object({
   // Object schema
}))

Ref link 1
Ref link 2

sqyvllje

sqyvllje2#

若要验证只需要一个对象而不需要另一个对象的对象数组,可以将可选方法和必选方法与数组方法的items方法结合使用。
例如,假设您有一个对象数组,其中必须至少包含一个具有requiredProp属性的对象,并且还可能包含具有可选属性optionalProp的其他对象。您可以使用以下架构对此进行验证:

const schema = Joi.array().items(
  Joi.object({
    requiredProp: Joi.string().required()
  }),
  Joi.object({
    optionalProp: Joi.string().optional()
  })
)

此架构指定数组必须至少包含一个具有requiredProp属性的对象,还可以包含具有可选optionalProp属性的其他对象。
然后,您可以使用validate方法根据此模式验证数组:

const array = [
  {
    requiredProp: 'abc'
  },
  {
    optionalProp: 'def'
  }
]
const result = schema.validate(array)

if (result.error) {
  console.log('Validation failed:', result.error)
} else {
  console.log('Validation succeeded')
}

这将成功验证,因为数组至少包含一个具有必需的requiredProp属性的对象,并且还包含一个具有可选的optionalProp属性的对象。

相关问题