常见问题排查指南
验证问题
问题1: 验证总是失败,但不知道原因
症状:
排查步骤:
- 检查 errors 数组
- 启用详细错误信息
- 使用 Schema 摘要工具
- 检查字段名是否正确
问题2: 自定义验证器不工作
症状:
可能原因及解决方案:
原因1: 异步验证器不能用同步 validate() 执行
原因2: custom() 返回值不符合预期
问题3: 嵌套对象验证失败
症状:
解决方案:
问题4: 数组验证不符合预期
症状:
检查语法:
性能问题
DSL 输入超过解析边界
对象形式 DSL 会拒绝循环引用、超过 256 层的嵌套,以及长度超过 100,000 字符的单条 DSL 字符串。此类输入会抛出包含失败对象路径的 SchemaCompileError,避免配置或不可信输入导致栈溢出或无界解析开销。
问题5: 验证速度慢
症状: 验证大量数据时性能差
按下面步骤排查:
1. 检查是否使用了缓存
2. 使用 compile() 预编译
3. 避免过于复杂的正则表达式
4. 批量验证优化
问题6: 内存占用过高
原因: 未清理缓存
解决方案:
多语言问题
问题7: 错误消息未翻译
症状: 显示英文错误消息,期望显示中文
排查步骤:
1. 检查语言包是否加载
2. 检查验证调用是否传入 locale
3. 动态切换语言
问题8: 自定义错误消息未生效
症状: 设置了 messages() 但没有显示
检查错误关键字:
常用错误关键字:
required- 必填字段为空min/max- 长度约束(推荐)minLength/maxLength- 长度约束(兼容)pattern- 正则验证失败format- 格式验证失败(email、url等)enum- 枚举值不匹配
导出器问题
问题9: 导出的 DDL 无法执行
症状: MySQL/PostgreSQL DDL 语句执行报错
常见问题:
1. 字段名包含保留关键字
2. 数据类型不支持
问题10: MongoDB 验证规则不生效
症状: 集合创建成功,但不验证数据
检查步骤:
1. 确认使用了 validator
2. 检查 validationLevel
String扩展问题
问题11: String 扩展方法未定义
症状:
原因: v3 的 root 与 pure 入口都不会安装 String 扩展;直接字符串链式必须显式导入安装入口或调用 installStringExtensions()。
解决方案:
问题12: 导入时提示 String.prototype 方法已存在
症状:
原因: 通过 schema-dsl/compat、schema-dsl/register-string 或 installStringExtensions() 显式安装时,检测到了不属于 schema-dsl 的同名方法。无副作用 root 入口不会安装或覆盖它。
解决方案:
如果冲突方法来自其他库,优先在应用初始化顺序或依赖配置中避免两个库同时扩展同名 String.prototype 方法。
调试技巧
技巧1: 查看生成的 JSON Schema
技巧2: 使用 Schema 摘要工具
技巧3: 启用详细日志
技巧4: 单元测试验证
获取帮助
如果以上方法无法解决你的问题:
- 查看文档: 完整文档索引
- 查看示例: troubleshooting.ts
- GitHub Issues: 提交问题
- 常见问题: FAQ.md
对应示例文件
示例入口: troubleshooting.ts
说明: 演示如何用 validate() 和 compile() 复现错误、查看路径/关键字/消息,并快速定位失败原因。
贡献
发现了新的常见问题?欢迎提交 PR 补充本文档!