[英]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.