Node模块语法错误:mysql2出现unexpected token问题求助
问题:使用mysql2连接MySQL时触发SyntaxError错误
我写了以下基础代码连接MySQL:
const mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "abc", password: "123", database: "test" }); con.connect(function (err) { if (err) throw err; console.log("Connected!"); });
运行后出现如下错误:
/home/mihir/Node_api/node_modules/lru-cache/dist/cjs/index.js:359 #initializeTTLTracking() { ^ SyntaxError: Unexpected token '(' at wrapSafe (internal/modules/cjs/loader.js:915:16) at Module._compile (internal/modules/cjs/loader.js:963:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Module.require (internal/modules/cjs/loader.js:887:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (/home/mihir/Node_api/node_modules/lru-cache/dist/cjs/index-cjs.js:5:36) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
我最初尝试使用普通mysql模块但报错,改用mysql2后遇到这个问题。我不想修改模块文件,网上也没找到可靠解决方案,现在卡在这里了。
解决方案
这个错误的核心原因是你的Node.js版本过低,不支持ES私有类方法(以#开头的语法)。mysql2依赖的lru-cache库新版本使用了该语法,而旧版Node.js无法解析。
有两种解决办法:
升级Node.js版本
私有类方法从Node.js 14.13.1版本开始支持,建议直接升级到LTS版本(比如16.x、18.x或20.x),这样不仅能解决这个问题,还能获得更好的性能和安全性。
如果你使用nvm管理Node.js版本,执行命令:nvm install --lts安装兼容旧Node.js版本的mysql2版本
如果你暂时无法升级Node.js,可以指定安装mysql2的旧版本,比如2.3.3,这个版本依赖的lru-cache不会使用私有类方法:npm install mysql2@2.3.3
内容的提问来源于stack exchange,提问作者digiworld 547
相关产品推荐
相关产品推荐

