You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10环境下NodeJS连接MySQL报错ECONNREFUSED求助

Node.js连接数据库报ECONNREFUSED 127.0.0.1:3306错误(Windows 10)

我在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,提问作者초간단

火山引擎 最新活动