【问题标题】:Validating an array's length against another array's length using joi使用 joi 验证一个数组的长度与另一个数组的长度
【发布时间】:2019-04-07 04:46:54
【问题描述】:

有没有办法使用 joi 来验证两个数组是否需要具有相同的长度?

这是一个例子:

Joi.object().keys({
  firstNames: Joi.array().items(Joi.string()).single(),
  lastNames: Joi.array().items(Joi.string()).single(),
});

如果这样可行,它还应该匹配两个数组的长度,所以没有firstName 缺少lastName

感谢您的帮助!

【问题讨论】:

    标签: javascript arrays joi


    【解决方案1】:

    当然有,看看.assert()。您可以使用它来比较对象中两个属性的值或属性。

    对于您的示例,您可以这样做:

    Joi.object().keys({
      firstNames: Joi.array().items(Joi.string()).single(),
      lastNames: Joi.array().items(Joi.string()).single(),
    }).assert('firstNames.length', Joi.ref('lastNames.length'));
    

    您还可以选择提供更有用的错误消息作为.assert() 的第三个参数。

    【讨论】:

    • 稍后进行一些测试,我看到{ lastNames: 'Jones' } 是有效的。你知道有什么方法可以解决这个错误吗?
    • @Arkanoid 这是因为你使用了.single() 修饰符。它将接受数组中的单个值,并在验证后将其转换为数组。
    • 哦,不,这实际上很好。我知道我们正在检查 firstNames 的长度是否与 lastNames 的长度匹配,但不是相反,因此 firstNames 为空,该检查不会运行,因此不会被检查。也许可以选择将两者都标记为必需,或者也以相反的方式进行检查。
    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2014-11-02
    相关资源
    最近更新 更多