Joi阵列验证忽略了所需的嵌套键

时间:2020-01-17 10:13:19

标签: javascript node.js express hapijs joi

Joi数组所需的验证无效。我有一个数组userData,其中包含对象,键dateMilli和值。我在所有地方都放置了require,但是如果我传递了一个空数组的userData []。它没有引发任何错误。

Joi版本为“ @ hapi / joi”:“ ^ 16.1.8” ,与Joi文档不尽相同,但无济于事。

userId为“ 123”,userData为[]

const data = { userId, userData };
const schema = Joi.object({
    userId: Joi.string().required(),
    userData: Joi.array().items({
        dateMilli: Joi.number().required(),
        value: Joi.string().valid("YES", "NO").required()
    }).required(),
});

let validate = schema.validate(data);
if (!validate || validate.hasOwnProperty("error")) {
        return res.send("Invalid parameters");
}

1 个答案:

答案 0 :(得分:1)

您需要将.min与array配合使用以禁止使用空数组。

尝试

const data = {"userId": "123", "userData": []};
const Joi = require("@hapi/joi");
const schema = Joi.object({
  "userId": Joi.string().required(),
  "userData": Joi.array().items({
    "dateMilli": Joi.number().required(),
    "value": Joi.string().valid("YES", "NO").required()
  }).min(1).required()
});

const validate = schema.validate(data);
console.log(validate);