【问题标题】:Conditional headers using Joi使用 Joi 的条件标头
【发布时间】:2018-07-31 00:17:02
【问题描述】:

我正在使用 Joi 来验证 HTTP 请求的标头。 我有两个标题。如果 FOO 存在,则 BAR 是必需的,否则 BAR 是可选的。这有效:

'FOO': Joi.string().optional(),
'BAR': Joi.string().when('FOO', { is: Joi.not(''), then: Joi.required() })

如果我希望 FOO 是一个数值,那么这是可行的:

'FOO': Joi.number().integer().default(0).optional(),
'BAR': Joi.string().when('FOO', { is: Joi.number().min(1), then: Joi.required() })

但是,如果我省略了 default(0),那么 Joi 认为当 FOO 不存在时需要 BAR。这是正确的行为吗?有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

    使用.with() 可以简化很多。考虑以下架构:

    const schema = Joi.object().keys({
        FOO: Joi.number().default(0).min(1),
        BAR: Joi.string()
    }).with('FOO', 'BAR');
    

    .with() 强制 BAR 仅在存在 FOO 时才需要。

    与您的示例类似,它还将确保 FOO 必须大于或等于 1(如果它实际上在有效负载中),否则 Joi 会将其默认为 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      相关资源
      最近更新 更多