仅允许 Joi 模式中键的特定值

Posted

技术标签:

【中文标题】仅允许 Joi 模式中键的特定值【英文标题】:Allow only specific values for key in Joi schema 【发布时间】:2018-08-07 01:15:19 【问题描述】:

除了正则表达式模式之外,还有其他方法可以在 Joi 验证模式中为键设置特定值吗?

我的示例架构:

const schema = joi.object().keys(
    query: joi.object().keys(
        // allow only apple and banana
        id: joi.string().regex(/^(apple|banana)$/).required(),
    ).required(),
)

【问题讨论】:

【参考方案1】:

你也可以用valid点赞

const schema = joi.object().keys(
  query: joi.object().keys(
    // allow only apple and banana
    id: joi.string().valid('apple','banana').required(),
  ).required(),
)

参考:https://github.com/hapijs/joi/blob/v13.1.2/API.md#anyvalidvalue---aliases-only-equal

【讨论】:

它只允许两者中的一个,我们如何才能做到两者。 如何防止有效载荷价格中的价格键:Joi.when('pricing', is: 'FIXED', then: //防止在此处添加价格,否则:Joi.number() 。 min(1) .max(1000) .required() ) @tareknoaman 首先,这听起来与这个问题无关。但是您也许可以省略“then”。如果这不起作用,请提出一个新问题。 @VinodKumarMarupu 您的评论毫无意义。一个字符串一次只能是一个值。您可能会使用数组或附加键来允许更多值。【参考方案2】:

如果您想接受一个或多个值(apple、banana 或两者),您可以使用allow:https://joi.dev/api/?v=17.3.0#anyallowvalues

【讨论】:

【参考方案3】:

您可以尝试使用 .valid() 以仅允许使用该特定字符串的 joi。

const schema = joi.object().keys(
  query: joi.object().keys(
    role: joi.string().valid('admin','student').required(), // joi would allow only if role is admin or student.
  ).required(),
)

这绝对等同于在 mongoose ODM 中给出“enam”字段来表示 mongodb 中的对象。

【讨论】:

以上是关于仅允许 Joi 模式中键的特定值的主要内容,如果未能解决你的问题,请参考以下文章

更新 Firebase 中键的值

修改 boost unordered_map 中键的值

有没有办法将 Object 中键的存在依赖于外部值?

计算 json 对象中键的出现次数 - IMPALA/HIVE

在 Python 中使用 None 值删除字典中键的正确方法

如何将数组中键的值添加到字典中? [关闭]