导入JDL文件报Cannot read property 'charCodeAt' of undefined如何排查
问题根因定位与解决方案
根因分析
从错误栈的调用链可以判断,报错触发在JHipster生成Liquibase数据库变更日志的测试假数据阶段:工具尝试用你在JDL中定义的字段正则校验规则生成匹配的随机值时,传入了未定义的正则内容到ret正则解析库,调用charCodeAt方法时触发空指针异常。
在线JDL Studio仅会校验JDL的语法合法性,不会校验正则规则的有效性、也不会校验正则是否适配当前版本JHipster依赖的RandExp库的能力范围,因此你在Studio中不会看到报错。
定位步骤
- 先遍历JDL文件中所有配置了
pattern校验规则的字段,优先排查以下问题:- 有没有定义空的正则规则,比如
pattern()括号内未填写任何内容 - 正则本身存在语法错误,比如未闭合的括号、错误的转义符
- 正则使用了
RandExp库不支持的ECMAScript新特性,比如后行断言、命名捕获组、Unicode属性转义等
- 有没有定义空的正则规则,比如
- 临时注释所有字段的
pattern配置,重新导入JDL,若报错消失即可确认是正则规则导致的问题,再逐个恢复pattern配置排查具体是哪个字段的规则触发的报错。
修复方案
- 修正存在语法问题的正则规则,替换
RandExp不支持的正则特性。 - 若你不需要生成测试假数据,导入JDL时添加参数
--no-fake-data跳过假数据生成步骤,即可绕过该报错。 - 若确实需要保留特殊正则规则,可以在JDL中为对应字段指定自定义假数据生成逻辑,比如配置
fake = "internet.email"指定用faker库的对应方法生成假数据,绕过正则随机值生成逻辑。
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

