如何解决Node.js后端的Error: connect ECONNREFUSED ::1:3306错误?
解决方案:MySQL连接拒绝 + CORS/502错误修复
一、解决MySQL连接拒绝问题(ECONNREFUSED ::1:3306)
1. 调整MySQL监听地址
错误显示连接的是IPv6地址::1,但默认MySQL可能仅监听IPv4的127.0.0.1:
- 编辑MySQL配置文件(通常路径为
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf):sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 找到
bind-address项,修改为同时支持IPv4和IPv6:
若仅需IPv4,可将Node.js连接配置中的bind-address = ::localhost替换为127.0.0.1(避免localhost解析到IPv6)。 - 重启MySQL服务生效:
sudo systemctl restart mysql
2. 验证MySQL用户权限
你提到新增过MySQL用户密码,当前设为空,需确保用户允许从::1或localhost连接:
- 登录MySQL控制台:
mysql -u root -p - 查看现有用户权限:
SELECT user, host, authentication_string FROM mysql.user; - 给应用用户添加IPv6本地连接权限(假设用户名为
smartcrop,数据库为your_db):
或直接设置用户允许从GRANT ALL PRIVILEGES ON your_db.* TO 'smartcrop'@'::1' IDENTIFIED BY ''; FLUSH PRIVILEGES;localhost连接(同时匹配IPv4/IPv6):GRANT ALL PRIVILEGES ON your_db.* TO 'smartcrop'@'localhost' IDENTIFIED BY ''; FLUSH PRIVILEGES;
3. 修复Node.js未处理错误
日志中的TypeError是因为数据库连接失败后,未判断err就直接访问result.length,需添加错误捕获:
connection.query('YOUR_SQL_QUERY', (err, result) => { if (err) { console.error('数据库查询失败:', err); // 向前端返回错误响应,比如: return res.status(500).json({ error: '数据库连接异常' }); } if (result.length > 0) { // 业务逻辑代码 } });
二、解决CORS和502 Bad Gateway问题
1. 配置Node.js后端CORS
前端跨域报错是因为后端未返回Access-Control-Allow-Origin头,可通过cors中间件快速解决:
- 安装
cors依赖:npm install cors - 在Node.js入口文件(
index.js)中引入并启用:const cors = require('cors'); const express = require('express'); const app = express(); // 仅允许前端localhost:3000访问(生产环境建议替换为正式域名) app.use(cors({ origin: 'http://localhost:3000', credentials: true }));
2. 排查Nginx配置导致的502错误
502错误通常是Nginx无法转发请求到Node.js服务:
- 编辑Nginx站点配置文件(路径如
/etc/nginx/sites-available/your-site.conf):server { listen 80; server_name 157.245.193.191; location / { # 替换为你的Node服务实际端口(比如3001) proxy_pass http://localhost:3001; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 验证配置并重启Nginx:
sudo nginx -t sudo systemctl restart nginx - 确认Node.js服务正在运行,且端口与Nginx配置一致。
内容的提问来源于stack exchange,提问作者Ian Ducao
相关产品推荐
相关产品推荐

