数据验证最佳实践指南
当你已经有 schema,需要理解验证选项、失败路径和结果处理时阅读本页。API 细节请配合 validate()、validateAsync() 和 Validator。
快速入门
基本验证流程
DSL 语法速查
基本类型
格式类型
约束语法
特殊标记
验证模式
1. 便捷函数验证(推荐)
最简单的验证方式,使用内置单例 Validator:
2. Validator 实例验证(高级)
需要自定义配置(如类型转换、自定义关键字)时使用:
类型转换说明:
new Validator()默认已启用 schema-dsl 的窄 smart coercion,用于对象字段上的字符串 → 数字 / 布尔值转换。需要 AJV 原生 coercion 行为时再使用coerceTypes: true;如需关闭 schema-dsl smart coercion,请传coerceTypes: false或smartCoerce: false。
注意:
new Validator()会创建一个新的 Ajv 实例,有一定的初始化开销。建议在应用启动时创建并复用,避免在每次请求中创建。
原始 JSON Schema 中的约束共同生效:声明 enum 后仍需满足 type,同时声明的 anyOf 与 oneOf 也必须都通过。pattern 遵循 AJV 默认的 Unicode 匹配(unicodeRegExp: true);需要按 UTF-16 码元匹配时,在构造选项中设置 unicodeRegExp: false。自定义 code.regExp 引擎由 AJV 执行。这些规则同样适用于嵌套 Schema 和同步、异步校验。
3. 预编译验证(高性能)
频繁验证同一 Schema 时使用:
4. 批量验证
验证多条数据时使用:
错误处理
错误对象结构
自定义错误消息
多语言错误消息
错误格式化
性能优化
1. 使用预编译
2. 缓存 Schema
3. 合理使用 allErrors
4. 监控性能
常见场景
用户注册表单
API 请求验证
配置文件验证
最佳实践
1. 使用 label 提升错误消息质量
2. 集中管理 Schema
3. 使用 SchemaUtils 复用字段
4. 分层验证
对应示例文件
示例入口: validation-guide.ts
说明: 覆盖推荐的验证流程:定义可复用 schema、格式化错误、预编译复用以及批量验证。