能连上 mysql 说明 node.js 环境和 mysql2 模块配置正确,关键需确认用户认证方式兼容(如 mysql 8.0+ 需改用 mysql_native_password)、使用连接池而非单连接、正确处理环境变量与工作目录,并注意权限、防火墙及异步逻辑。

能连上 MySQL 就说明 Node.js 环境和数据库驱动都配对了,关键不是装了什么插件,而是 mysql2 模块是否正确安装、连接参数是否匹配你本地 MySQL 的实际配置(尤其是认证方式)、以及是否处理了常见报错如 ER_NOT_SUPPORTED_AUTH_MODE。
确认 MySQL 用户认证方式是否兼容 node.js 客户端
MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,而老版本 mysql 模块不支持,会直接报 ER_NOT_SUPPORTED_AUTH_MODE 错误。这不是 VSCode 或 Node.js 的问题,是协议不匹配。
- 在 MySQL 命令行中执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; - 然后执行:
FLUSH PRIVILEGES; - 如果用的是远程 MySQL,把
localhost换成对应 host,比如%或具体 IP -
mysql2模块默认支持该认证方式,但前提是用户已切换;只装mysql2不改用户认证方式,照样连不上
用 mysql2 创建连接池而非单连接
单次 createConnection 在 Web 服务中极易耗尽连接数或泄漏,VSCode 里跑脚本可能一时看不出问题,但一旦加点并发或重复运行,就会卡住或报 connect ECONNREFUSED。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 别写
mysql.createConnection(...),改用连接池:mysql.createPool(...) - 必须显式调用
pool.end()(脚本结束前),否则 Node 进程不会退出 - 连接池配置建议加上
waitForConnections: true和queueLimit: 0,避免请求被丢弃 - 示例片段:
const pool = mysql.createPool({<br> host: 'localhost',<br> port: 3306,<br> user: 'root',<br> password: '123456',<br> database: 'testdb',<br> waitForConnections: true,<br> queueLimit: 0<br>});
VSCode 调试时注意环境变量和当前工作目录
在 VSCode 里按 F5 调试 db.js,Node.js 默认从项目根目录启动,但如果 launch.json 里没设 "cwd",而你又用了相对路径读取配置文件或证书,就容易找不到文件。
- 检查
.vscode/launch.json中的cwd字段是否指向项目根目录,例如:"cwd": "${workspaceFolder}" - 如果连接信息存在
.env文件里,确保已安装dotenv并在代码最顶部执行:require('dotenv').config(); - 不要依赖终端里手动
export的环境变量——VSCode 调试器默认不继承 shell 环境,除非你在launch.json里显式写"env": {...} - 调试时右下角状态栏会显示当前 Node 版本,确认它和你在终端里执行
node -v输出一致,避免 nvm 切版后 VSCode 仍用旧版本
真正卡住人的地方往往不是“怎么连”,而是 MySQL 用户权限没开、防火墙拦了 3306、或者 mysql2 的 promise 方法没 await 导致后续逻辑乱序执行——这些都不会报语法错误,但结果就是查不到数据、不报错也不返回。










