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

Joi: validate array element depending on index

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

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

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

是的,有办法。您可以组合 array.ordered with array.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 }, { a: '123', b: 10 }])

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