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

时间:2017-03-29 20:21:39

标签: 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),
});

有没有办法要求至少一个这些字段?我不在乎哪一个。

注意:为此SO question提供的解决方案不能为我提供服务,因为我有7个字段并且可能会增长,因此执行所有可能的组合是不行的。< / p>

Joi API Reference中找不到可能对此用例有用的任何方法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

如果确实不关心需要哪一个,那么您可以使用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);

必须至少需要一个密钥(onetwothree)。名称与这三个不同的密钥将被拒绝。

答案 1 :(得分:2)

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

const schema = joi.object({
   a: joi.number(),
   b: joi.number(),
}).or('a', 'b');

如果需要一组特定的密钥,这种方法很好,而当需求很大时,@ Ankh的更好,因为我这个问题标题并且你有很多密钥,所以我选择他的答案而不是我的对了。

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