【问题标题】:Is there a way to validate strings that represent nested object keys in Joi?有没有办法验证代表 Joi 中嵌套对象键的字符串?
【发布时间】:2022-01-14 09:02:11
【问题描述】:

我正在使用 joi@^17.4.0 并且有一个如下所示的架构:

settings: Joi.object({
  isHidden: Joi.boolean(),
  payoutData: Joi.object({
    email: Joi.string().email(),
  }),
}),

我想输入字符串 'settings.isHidden''settings.payoutData.email' 而不在架构中对这些字符串中的每一个进行硬编码。有没有一种方法可以让 joi 根据我已经拥有的对象模式知道这些字符串是有效的?目前,当我尝试验证这些字符串时,我收到一个验证错误,指出不允许使用这些键。

要验证的示例对象:

{ 'settings.isHidden': false }

【问题讨论】:

  • 我认为仅靠 Joi 是不可能的。使用架构的变体,您可能需要实现自己的验证函数,利用 Hoek.reach() 之类的东西来提取规则。
  • @Ankh 正是我所需要的。谢谢!

标签: javascript node.js joi


【解决方案1】:

您的 Joi 架构:

settings: Joi.object({
  isHidden: Joi.boolean(),
  payoutData: Joi.object({
    email: Joi.string().email(),
  }),
}),

settings(大概是一个对象的一个​​属性)是一个有两个属性的对象:

  • isHidden,一个布尔值,并且
  • payoutData,一个具有email属性的对象,一个字符串

您的示例对象

{ 'settings.isHidden': false }

是具有单个属性 settings.isHidden 的对象,因此验证失败。

所以,您的对象未能通过架构验证。

【讨论】:

  • 我认为 OP 理解它失败的原因,他们的问题是对象密钥链是否可用于引用架构中的规则 - 据我所知,Joi 本身无法做到这一点。
猜你喜欢
  • 1970-01-01
  • 2017-08-20
  • 2018-02-27
  • 2019-03-23
  • 2019-04-14
  • 1970-01-01
  • 2019-10-07
  • 2016-02-19
  • 1970-01-01
相关资源
最近更新 更多