问题描述
在 Joi 中,有什么方法可以根据数组的索引来验证数组的元素吗?我有这个:
const schema = Joi.array().items(
Joi.object({
a: Joi.string(),b: Joi.number()
})
)
而且我只希望第一个元素需要“a”。
解决方法
是的,有办法。您可以将 array.ordered 与 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 },b: 10 }])
如果您想验证除第一个元素之外的其他元素,可能会有点棘手。