You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node Express+Mybatis-Mapper在Ubuntu服务器正则表达式报错求助

解决Node Express + mybatis-mapper部署Ubuntu时的正则转义报错问题

问题现象

本地Windows+VS Code环境下,Node Express结合mybatis-mapper搭建的网页运行正常,但部署到Ubuntu服务器后出现以下报错:

SyntaxError: Invalid regular expression: /^([\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]+)/: Invalid escape
    at new RegExp (<anonymous>)
    at Object.createWordRegex (/home/minieyes85/node_modules/sql-formatter/lib/core/regexFactory.js:38:10)
    at new Tokenizer (/home/minieyes85/node_modules/sql-formatter/lib/core/Tokenizer.js:74:36)
    at StandardSqlFormatter.tokenizer (/home/minieyes85/node_modules/sql-formatter/lib/languages/StandardSqlFormatter.js:57:14)
    at StandardSqlFormatter.format (/home/minieyes85/node_modules/sql-formatter/lib/core/Formatter.js:87:26)
    at Object.format (/home/minieyes85/node_modules/sql-formatter/lib/sqlFormatter.js:74:29)
    at MybatisMapper.getStatement (/home/minieyes85/node_modules/mybatis-mapper/index.js:109:32)
    at router.get (/home/minieyes85/routes/main.js:51:28)
    at Layer.handle [as handle_request] (/home/minieyes85/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/minieyes85/node_modules/express/lib/router/route.js:144:13)

原因分析

该报错与XML编码无关,核心原因是Node.js版本对Unicode属性转义语法的支持差异:

  • 本地Windows环境使用的Node.js版本较高,支持ES2018引入的\p{...} Unicode属性转义正则语法;
  • Ubuntu服务器上的Node.js版本过低,不支持该语法,导致sql-formatter库中的正则表达式解析失败。

解决方案

方案1:升级Ubuntu服务器的Node.js版本

将Node.js升级到支持Unicode属性转义的版本(Node.js 10.0.0及以上,推荐使用LTS版本如16.x/18.x):

  1. 安装nvm(Node版本管理器):
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    
    (执行后重启终端使nvm生效)
  2. 安装并切换到最新LTS版本:
    nvm install --lts
    nvm use --lts
    
  3. 重启Node项目,验证报错是否消失。

方案2:降级sql-formatter到兼容低版本Node的版本

如果暂时无法升级Node.js,可手动指定兼容的sql-formatter版本:

  1. 卸载当前版本:
    npm uninstall sql-formatter
    
  2. 安装兼容的旧版本(如3.2.3,该版本未使用Unicode属性转义):
    npm install sql-formatter@3.2.3
    
  3. 重启项目,检查问题是否解决。

方案3:禁用mybatis-mapper的SQL格式化功能

通过关闭mybatis-mapper的SQL格式化逻辑,绕过sql-formatter的调用:
在调用getStatement方法时,添加format: false参数,示例代码:

const statement = mybatisMapper.getStatement('namespace', 'sqlId', params, { format: false });

该方式无需修改Node版本或依赖库,直接跳过格式化步骤,避免触发正则报错。

内容的提问来源于stack exchange,提问作者J.S.Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:55:24