在使用运用json-schema(JSON格式的一种规范)规范的一个工具Ajv,在使用过程报错
报错文件代码,node test.js 运行报错
// test.js文件
const Ajv = require("ajv");
const ajv = new Ajv(); // options can be passed, e.g. {allErrors: true}
const schema = {
type: "object",
properties: {
name: {
type: "string",
},
pets: {
type: "array",
items: [{ type: "number" }, { type: "string" }],
},
},
required: ["name"],
};
const validate = ajv.compile(schema);
const data = {
name: "names",
pets: [1, "pets"],
};
const valid = validate(data);
if (!valid) console.log(validate.errors);
报错:
"items" is 2-tuple, but minItems or maxItems/additionalItems are not specified or different at path "#/properties/pets"
原因: 这是因为Ajv有一个严格模式,当数据的类型是数组,如果items是一个数组(元组模式),但“minItems”和“additionalItems”/“maxItems”关键字都不存在时会警告。也就不允许不受约束的元组
元组:预定义的长度和类型的数组
解放方法:
- 关闭不允许不受约束的元组的检验
const ajv = new Ajv({
strictTuples: false
});
- 设置数组类型数据的规则属性maxItems和minItems
const schema = {
type: "object",
properties: {
name: {
type: "string",
},
pets: {
type: "array",
items: [{ type: "number" }, { type: "string" }],
maxItems: 2, // 加入这一行
minItems: 2, // 加入这一行
},
},
required: ["name"],
};
- 设置数组类型数据的规则属性additionalItems和minItems
const schema = {
type: "object",
properties: {
name: {
type: "string",
},
pets: {
type: "array",
minItems: 2, // 加入这一行
additionalItems: false, // 加入这一行
items: [{ type: "number" }, { type: "string" }],
},
},
required: ["name"],
};
相关网址: