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 }])
如果您想验证第一个元素以外的其他元素,可能会有点棘手。
在 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 }])
如果您想验证第一个元素以外的其他元素,可能会有点棘手。