给定这样的定义:
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
});
Run Code Online (Sandbox Code Playgroud)
有没有办法要求至少其中一个字段?我不在乎哪一个。
注意:为这个SO问题提供的解决方案对我不起作用,因为我有7个字段,并且它们可能会增加,因此,进行所有可能的组合都是不可行的。
在Joi API参考中找不到适用于此用例的任何方法。
任何帮助是极大的赞赏。
如果您真的不在乎需要哪一个,则可以使用来确保对象中至少有一个键object().min(1)。
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
}).min(1);
Run Code Online (Sandbox Code Playgroud)
至少有一个键(one,two,three)必须按要求。名称与这三个名称不同的键将被拒绝。
在文档中找到了除@Ankh建议的方法之外的另一种方法,但我以前找不到它:
const schema = joi.object({
a: joi.number(),
b: joi.number(),
}).or('a', 'b');
Run Code Online (Sandbox Code Playgroud)
如果一个人需要一组特定的键,那么这种方法是不错的选择;而当要求非常严格时,@ Ankh更好,因为我有这个问题的标题,而且您有很多键,所以我选择他的答案是我的正确答案。
只是想离开这里做另一种方式。