首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点Joi: joi键的值必须与joi数组中的一个对象键匹配

节点Joi: joi键的值必须与joi数组中的一个对象键匹配
EN

Stack Overflow用户
提问于 2021-03-10 14:23:49
回答 1查看 594关注 0票数 3

这是我的Joi模式

代码语言:javascript
复制
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匹配。

示例

这个输入应该通过

代码语言:javascript
复制
{
  createdBy: 'abcd1234',
  members: [
    {
      id: 'abcd1234',
      name: "john"
    },
    {
      id: 'xyz1234',
      name: "john"
    }
  ]
}

这个输入应该会失败

代码语言:javascript
复制
{
  createdBy: 'abcd1234',
  members: [
    {
      id: 'bcdf1234',
      name: "john"
    },
    {
      id: 'xyz1234',
      name: "john"
    }
  ]
}

这和乔依有可能吗?我在Joi Docs里没有找到这样的东西。

EN

回答 1

Stack Overflow用户

发布于 2021-03-10 17:42:29

您可以将array.has参考结合起来。

代码语言:javascript
复制
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允许访问当前对象的任何值。

这意味着将传递以下对象:

代码语言:javascript
复制
const validObj = {
  createdBy: 'abcd1234',
  members: [
    {
      id: 'abcd1234',
      name: "john"
    },
    {
      id: 'xyz1234',
      name: "john"
    }
  ]
}

schema.validate(validObj, { context: validObj })

这将失败:

代码语言:javascript
复制
const invalidObj = {
  createdBy: 'abcd1234',
  members: [
    {
      id: 'xxxx',
      name: "john"
    },
    {
      id: 'xyz1234',
      name: "john"
    }
  ]
}

schema.validate(invalidObj, { context: invalidObj })

这也将失败,因为有一个重复:

代码语言:javascript
复制
const invalidObj = {
  createdBy: 'abcd1234',
  members: [
    {
      id: 'abcd1234',
      name: "john"
    },
    {
      id: 'abcd1234',
      name: "john"
    }
  ]
}

schema.validate(invalidObj, { context: invalidObj })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66566677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档