13

给定这样的定义:

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 问题提供的解决方案对我没有帮助,因为我有 7 个字段并且它们可能会增长,所以做所有可能的组合是不行的。

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

任何帮助是极大的赞赏。

4

2 回答 2

28

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

必须至少需要一个键 ( one, two, three)。名称与这三个不同的键将被拒绝。

于 2017-03-30T08:20:25.887 回答
25

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

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

如果需要一组特定的键,这种方法很好,而@Ankh's 更好,因为我的这个问题标题和你有很多键,所以我选择他的答案而不是我的答案是正确的。

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

于 2017-03-30T12:16:26.280 回答