如何解决节点 Joi:一个 joi 键的值必须与 joi 数组中的一个对象键匹配
这是我的 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"
}
]
}
这对 joi 有可能吗?我在 Joi Docs 中没有找到类似的内容。
解决方法
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"
}
]
}
schema.validate(invalidObj,{ context: invalidObj })
这也会失败,因为有重复:
const invalidObj = {
createdBy: 'abcd1234',{
id: 'abcd1234',{ context: invalidObj })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。