gpt4 book ai didi

validation - 要求 joi 对象中至少有一个允许 null 的非 null 子项

转载 作者:行者123 更新时间:2023-12-05 00:57:33 24 4
gpt4 key购买 nike

我正在定义一个 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()代码来完成工作,但在那时我似乎还不如自己做一个循环。希望被证明是错误的!

最佳答案

这是准备好的答案:Using Joi, require one of two fields to be non empty

乔伊有.alternatives() method ,即有 .try()您可以简单地浏览所有选项的方法
在每种情况下,您只能保留一个 required field

const socialUrl = joi.string().min(1).alphanum().allow(null);

const schema = joi.alternatives().try(
joi.object({
facebook: socialUrl.required(),
twitter: socialUrl,
youtube: socialUrl,
}),
joi.object({
facebook: socialUrl,
twitter: socialUrl.required(),
youtube: socialUrl,
}),
joi.object({
facebook: socialUrl,
twitter: socialUrl,
youtube: socialUrl.required(),
}),
);

所以,你不需要使用 .min().or()

关于validation - 要求 joi 对象中至少有一个允许 null 的非 null 子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com