gpt4 book ai didi

node.js - Node Joi : Value of a joi key must match with one object key in a joi array

转载 作者:行者123 更新时间:2023-12-05 06:49:39 26 4
gpt4 key购买 nike

这是我的 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()
}
}

我想要的是

The value of createdBy must match with one unique object id in members array

例子

这个输入应该通过

{
createdBy: 'abcd1234',
members: [
{
id: 'abcd1234',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}

这个输入应该会失败

{
createdBy: 'abcd1234',
members: [
{
id: 'bcdf1234',
name: "john"
},
{
id: 'xyz1234',
name: "john"
}
]
}

这可以用 joi 实现吗?我在 Joi Docs 中没有找到类似的东西.

最佳答案

你可以结合array.hasref :

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 })

关于node.js - Node Joi : Value of a joi key must match with one object key in a joi array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66566677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com