我在使用 Joi 验证器验证数组时遇到问题

问题描述

let schema=Joi.array().length(2).items(Joi.number().integer().max(23).min(0).required(),Joi.number().integer().max(59).min(0).required())
        if (schema.validate(value).error) {
            return {
                error: text
            }
        }

嗨,我对 joi 有一个大问题 我想验证一个长度为 2 的数组,第一个索引是小时,最大值是 23,最小值是 0。第二个索引是分钟,最大值是 59,最小值是 0。

第二条规则运行良好,但是当我输入 24 小时或更多 joi 时,不会返回错误,我无法理解那是什么!!! 对于 arry 的第二个索引,我没有问题,并且大于 59 且小于 0 效果很好 它仅用于第一个索引 我用字符串和 joi 测试第一个索引返回错误,但是当我使用数字 60 或更多时,我没有错误! 注意:sary 英语不好

解决方法

你定义架构的方式,元素的顺序是无关紧要的,这意味着这个例子会通过:

[24,1]

如果要按顺序定义数组元素,则必须将 .items 替换为 .ordered

Joi.array().length(2).ordered(
    Joi.number().integer().max(23).min(0).required(),Joi.number().integer().max(59).min(0).required()
)

这样,第一个元素被强制为 0-23 之间的值,第二个元素为 0-59 之间的值。