这是我的Joi模式
const createRoom = {
body: {
createdBy: Joi.string().required(),
members: Joi.array().min(2).max(2).items(
Joi.object().keys({
id: Joi.string().required(),
name: Joi.string().required(),
})
).unique('id').required()
}
}我想要的是
createdBy的值必须与成员数组中的唯一对象id匹配。
示例
这个输入应该通过
{
createdBy: 'abcd1234',
members: [
{
id: 'abcd1234',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}这个输入应该会失败
{
createdBy: 'abcd1234',
members: [
{
id: 'bcdf1234',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}这和乔依有可能吗?我在Joi Docs里没有找到这样的东西。
发布于 2021-03-10 17:42:29
const schema = Joi.object({
createdBy: Joi.string().required(),
members: Joi.array().min(2).max(2).items(
Joi.object().keys({
id: Joi.string().required(),
name: Joi.string().required(),
}))
.has(Joi.object({
id: Joi.string().required().valid(Joi.ref('$createdBy')),
name: Joi.string()
}))
.unique('id')
})使用array.has,您是说希望数组中至少有一个这样的对象。Joi.ref允许访问当前对象的任何值。
这意味着将传递以下对象:
const validObj = {
createdBy: 'abcd1234',
members: [
{
id: 'abcd1234',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}
schema.validate(validObj, { context: validObj })这将失败:
const invalidObj = {
createdBy: 'abcd1234',
members: [
{
id: 'xxxx',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}
schema.validate(invalidObj, { context: invalidObj })这也将失败,因为有一个重复:
const invalidObj = {
createdBy: 'abcd1234',
members: [
{
id: 'abcd1234',
name: "john"
},
{
id: 'abcd1234',
name: "john"
}
]
}
schema.validate(invalidObj, { context: invalidObj })https://stackoverflow.com/questions/66566677
复制相似问题