仅允许 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 模式中键的特定值的主要内容,如果未能解决你的问题,请参考以下文章
计算 json 对象中键的出现次数 - IMPALA/HIVE