【问题标题】:Is it possible to require at least one field from a set of defined fields?是否可以从一组定义的字段中要求至少一个字段?
【发布时间】:2017-08-23 12:35:48
【问题描述】:

给定这样的定义:

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 个字段并且它们可能会增长,所以做所有可能的组合是不行的。

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

非常感谢任何帮助。

【问题讨论】:

    标签: javascript joi


    【解决方案1】:

    如果您真的不在乎需要哪一个,那么您可以使用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)。名称与这三个不同的键将被拒绝。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2011-07-21
      • 2010-11-21
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多