常见问题排查指南
用途: 快速解决 schema-dsl 使用中的常见问题
更新: 2026-06-10
📑 目录
验证问题
问题1: 验证总是失败,但不知道原因
症状:
排查步骤:
- 检查 errors 数组
- 启用详细错误信息
- 使用 Schema 摘要工具
- 检查字段名是否正确
问题2: 自定义验证器不工作
症状:
可能原因及解决方案:
原因1: 异步验证器不能用同步 validate() 执行
原因2: custom() 返回值不符合预期
问题3: 嵌套对象验证失败
症状:
解决方案:
问题4: 数组验证不符合预期
症状:
检查语法:
性能问题
问题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 扩展方法未定义
症状:
原因: root entry 默认会安装 String 扩展;如果仍然报错,通常是之前调用过 uninstallStringExtensions(),或导入了不包含 root side effect 的旧构建/异常入口。
解决方案:
问题12: 导入时提示 String.prototype 方法已存在
症状:
原因: schema-dsl 为兼容 v1.1.x 会在 root entry 默认安装 String 扩展。为了避免覆盖宿主环境已有的同名方法,安装器会在导入阶段检测 String.prototype.label / pattern 等方法;如果这些方法不是 schema-dsl 自己安装的扩展,就会抛出冲突错误。
解决方案:
如果冲突方法来自其他库,优先在应用初始化顺序或依赖配置中避免两个库同时扩展同名 String.prototype 方法。
调试技巧
技巧1: 查看生成的 JSON Schema
技巧2: 使用 Schema 摘要工具
技巧3: 启用详细日志
技巧4: 单元测试验证
获取帮助
如果以上方法无法解决你的问题:
- 查看文档: 完整文档索引
- 查看示例: troubleshooting.ts
- GitHub Issues: 提交问题
- 常见问题: FAQ.md
对应示例文件
示例入口: troubleshooting.ts
说明: 演示如何用 validate() 和 compile() 复现错误、查看路径/关键字/消息,并快速定位失败原因。
贡献
发现了新的常见问题?欢迎提交 PR 补充本文档!