是否可以要求一组定义的字段中至少有一个字段?

FLC*_*FLC 4 javascript joi

给定这样的定义:

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参考中找不到适用于此用例的任何方法。

任何帮助是极大的赞赏。

Ank*_*nkh 7

如果您真的不在乎需要哪一个,则可以使用来确保对象中至少有一个键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)

至少有一个键(onetwothree)必须按要求。名称与这三个名称不同的键将被拒绝。


FLC*_*FLC 6

文档中找到了除@Ankh建议的方法之外的另一种方法,但我以前找不到它:

const schema = joi.object({
   a: joi.number(),
   b: joi.number(),
}).or('a', 'b');
Run Code Online (Sandbox Code Playgroud)

如果一个人需要一组特定的键,那么这种方法是不错的选择;而当要求非常严格时,@ Ankh更好,因为我有这个问题的标题,而且您有很多键,所以我选择他的答案是我的正确答案。

只是想离开这里做另一种方式。