Joi:根据索引验证数组元素

问题描述

在 Joi 中,有什么方法可以根据数组的索引来验证数组的元素吗?我有这个:

const schema = Joi.array().items(
      Joi.object({
        a: Joi.string(),b: Joi.number()
      })
    )

而且我只希望第一个元素需要“a”。

解决方法

是的,有办法。您可以将 array.orderedarray.items 结合使用:

const schema = Joi.array()
    .ordered(Joi.object({
        a: Joi.string().required(),b: Joi.number()
    }))
    .items(Joi.object({
        a: Joi.string(),b: Joi.number()
    })); 

这样,数组中的第一项必须是您定义的对象,a 是必需的,后续项就不需要 a。 >

此验证将通过:

schema.validate([{ a: '123',b: 10 },{ a: '123',b: 10 }])

而这个会失败:

// ValidationError: "[0].a" is required
schema.validate([{ b: 10 },b: 10 }])

如果您想验证除第一个元素之外的其他元素,可能会有点棘手。