使用Joi的条件标题

时间:2018-07-31 00:17:02

标签: javascript node.js validation joi

我正在使用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。那是正确的行为吗?有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用.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