【发布时间】:2017-12-20 18:27:21
【问题描述】:
我正在为一个对象定义一个Joi 架构,其中包含一些社交资料字段。目标是确保所有字段都存在,并且至少其中一个是非空字符串,但允许其他字段为 null。
这是我目前所拥有的:
const socialUrl = joi.string().min(1).alphanum().allow(null);
const schema = joi.object({
facebook : socialUrl.required(),
twitter : socialUrl.required(),
youtube : socialUrl.required()
}).required()
这很好用,除了以下对象被认为是有效的:
{
facebook : null,
twitter : null,
youtube : null
}
在对象上使用min() 和or() 并没有帮助,因为字段存在,它们只是错误的类型。
之后自己做一个额外的循环并检查所有字段为null 的具体情况是非常简单的,但这并不理想。
这被用于payload validation,如果知道客户端理解完整的模式会很高兴,因此希望所有字段都存在。也许这不值得。我确实觉得我可以使用一些冗长的when() 代码来完成工作,但似乎那时我还不如自己做一个循环。希望被证明是错误的!
【问题讨论】:
标签: validation schema hapijs joi