Windows 10环境下NodeJS连接MySQL报错ECONNREFUSED求助
我在Windows 10系统中尝试用NodeJS连接MySQL,但始终失败,甚至连MongoDB模块也会触发相同的错误。以下是我的代码:
var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "yourusername", password: "yourpassword" }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); con.query("CREATE DATABASE mydb", function (err, result) { if (err) throw err; console.log("Database created"); }); });
运行代码时出现的错误信息:
if(err) throw err; ^ Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) -------------------- at Protocol._enqueue (C:\Users\tete6\NodeJS\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (C:\Users\tete6\NodeJS\node_modules\mysql\lib\protocol\Protocol.js:51:23) at Connection.connect (C:\Users\tete6\NodeJS\node_modules\mysql\lib\Connection.js:116:18) at Object.<anonymous> (C:\Users\tete6\NodeJS\demo_db_connection.js:9:5) at Module._compile (internal/modules/cjs/loader.js:955:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10) at Module.load (internal/modules/cjs/loader.js:811:32) at Function.Module._load (internal/modules/cjs/loader.js:723:14) at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10) at internal/main/run_main_module.js:17:11 { errno: 'ECONNREFUSED', code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true }
我已经尝试了以下方法但均失败:
- 将host从"localhost"改为"127.0.0.1"
- 添加"port: 3306"配置
- 检查端口可用性和防火墙设置
- XAMPP中MySQL运行正常
我了解到ECONNREFUSED错误可能主要是NodeJS的问题而非SQL模块问题,恳请各位提供解决方案。
看起来你遇到的是Node.js在Windows 10下的通用网络连接问题,毕竟连MongoDB也报同样的错,不是单一数据库模块的问题。我之前踩过类似的坑,给你几个针对性的排查和解决步骤:
1. 确认数据库服务真的在监听目标端口
虽然你说XAMPP的MySQL运行正常,但不妨再用命令行确认一下:
打开CMD,输入:
netstat -ano | findstr :3306
如果输出里没有LISTENING状态的记录,说明MySQL根本没在3306端口监听——可能是XAMPP的MySQL配置被修改了(比如改了端口),或者服务没真正启动。你可以打开XAMPP控制面板,点击MySQL的Config按钮,查看my.ini里的port配置,确认是不是3306。
2. 检查Windows防火墙对Node.js的权限
有时候Windows防火墙会默认拦截Node.exe的出站连接,哪怕你手动检查防火墙规则也可能漏了。试试:
- 临时关闭Windows Defender防火墙(测试用,之后记得打开),再运行代码看看能不能连接。
- 如果关闭后正常,就去防火墙的“高级设置”里,给
node.exe添加一条允许出站连接的规则(找到你Node安装目录下的node.exe,比如C:\Program Files\nodejs\node.exe)。
3. 修复本地hosts文件的映射
Windows的hosts文件如果被篡改,会导致localhost解析异常。打开C:\Windows\System32\drivers\etc\hosts(用管理员权限打开记事本编辑),确保有这条记录:
127.0.0.1 localhost ::1 localhost
如果有其他奇怪的localhost映射,先注释掉(加#),保存后重启终端再测试。
4. 用管理员权限运行Node.js
Windows的UAC权限有时候会限制网络连接操作。右键点击CMD/PowerShell,选择“以管理员身份运行”,然后进入你的项目目录,重新运行代码试试。
5. 升级Node.js版本并重新安装依赖
从错误日志里的路径(比如internal/modules/cjs/loader.js)看,你的Node.js版本比较旧了,旧版本和Windows 10的网络栈可能存在兼容性问题:
- 去Node.js官网下载LTS版本(比如18.x或20.x),覆盖安装。
- 卸载并重新安装数据库模块:
npm uninstall mysql mongodb npm install mysql mongodb
6. 检查代理设置
如果你的系统开启了全局代理(比如VPN、代理软件),Node.js可能会走代理连接本地数据库,导致失败。可以在运行代码前,临时关闭代理,或者在Node.js里禁用代理:
在代码开头添加:
process.env.NO_PROXY = 'localhost,127.0.0.1'
按照这个顺序排查,应该能找到问题所在。我当时是因为hosts文件被篡改,修复后就正常了。
内容的提问来源于stack exchange,提问作者초간단




