【问题标题】:Allow only specific values for key in Joi schema仅允许 Joi 模式中键的特定值
【发布时间】: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(),
})

【问题讨论】:

    标签: javascript joi


    【解决方案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 或两者),您可以使用allowhttps://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 中的对象。

      【讨论】:

        猜你喜欢
        • 2017-05-19
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多