ajv-keywords 包为 Ajv JSON Schema 验证器提供自定义关键字的能力,从而使数据验证更加灵活和强大。本文将深入探讨如何利用这些高级特性来优化你的数据验证过程。
仓库地址:https://github.com/epoberezkin/ajv-keywords
关键字种类
ajv-keywords 提供了针对不同数据类型(如数字、字符串、数组和对象)的一系列关键字,下面是一些亮点介绍。
对于数字
range 和 exclusiveRange:对数字进行范围限制。
对于字符串
regexp:允许在 JSON Schema 中使用带有标志的正则表达。
transform:支持在验证过程中修改字符串。
对于数组
uniqueItemProperties:确保数组中的对象通过某些属性值唯一。
对于对象
allRequired 和 anyRequired:分别要求对象包含所有或至少一个指定的属性。
实用示例
下面通过一些实用的代码示例,展示如何在项目中使用这些自定义关键字进行数据验证。
添加自定义关键字
const Ajv = require("ajv");
const ajv = new Ajv();
require("ajv-keywords")(ajv);
// 堆代码 duidaima.com
// 示例:使用 instanceof 关键字
ajv.validate({ instanceof: "RegExp" }, /.*/); // 返回 true
字符串转换
对于字符串数据类型,我们可以使用 transform 关键字来修改数据。
require("ajv-keywords")(ajv, "transform");
const schema = {
type: "string",
transform: ["trim", "toLowerCase"]
};
const data = " Hello World ";
ajv.validate(schema, data);
console.log(data); // 输出 'hello world'
扩展动态默认值
dynamicDefaults 关键字允许我们为对象属性分配动态默认值,例如时间戳、随机数或序列号。
require("ajv-keywords/dist/definitions/dynamicDefaults")
const schema = {
type: "object",
dynamicDefaults: {
ts: "datetime",
id: { func: "seq", args: { name: "id" } }
}
};
通过合理利用 ajv-keywords 包,我们可以极大地提升 JSON Schema 数据验证的能力和灵活性,实现更加定制化的验证逻辑。