繁体   English   中英

使用Joi的条件标题

[英]Conditional headers using 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。 那是正确的行为吗? 有没有更好的方法来解决这个问题?

通过使用.with()可以使此过程变得简单得多。 考虑以下架构:

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

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

同样类似于您的示例,它还可以确保FOO实际上在有效负载中必须大于或等于1 ,否则Joi会将其默认设置为0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM