You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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:
    bind-address = ::
    
    若仅需IPv4,可将Node.js连接配置中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:28:17