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

如何解决VS Code中Node.js项目的read ECONNRESET错误

解决Node.js应用中read ECONNRESET错误及接口超时问题

首先明确:你执行的npm config set registry http://registry.npmjs.org/和安装@angular/cli和当前问题完全无关,无需进行这类操作。

问题根源

你使用的mysql模块已停止维护,单连接模式下若MySQL服务器因空闲超时断开连接,再次请求时复用失效连接就会触发read ECONNRESET错误;接口等待10秒则是连接超时导致的延迟。

具体解决方法

1. 替换为维护中的mysql2模块

旧mysql模块不再更新,mysql2修复了大量连接相关bug,兼容性更强:

npm uninstall mysql && npm install mysql2

修改代码中的引入部分:

// 替换原mysql引入
const mysql = require("mysql2");

2. 使用连接池替代单连接

单连接易因空闲被服务器断开,连接池会自动管理连接的创建、复用与回收,稳定性更高:
修改数据库连接代码:

// 用createPool替代createConnection
const db = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "pass@",
  database: "mydb",
  // 可选:配置连接池参数
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

// 查询方式不变,pool.query会自动处理连接的获取与释放
app.get("/r", (req, res) => {
  const q = `select * from fbads`;
  db.query(q, (err, data) => {
    if (err) {
      return res.send(err.code);
    } else {
      return res.send(data);
    }
  });
});

3. 配置MySQL服务器超时参数(可选)

检查MySQL服务器的连接超时设置,避免过早断开空闲连接:
登录MySQL执行命令查看参数:

SHOW VARIABLES LIKE '%timeout%';

若wait_timeout或interactive_timeout值过小(如小于3600秒),可修改配置文件(my.cnf/my.ini):

[mysqld]
wait_timeout = 28800
interactive_timeout = 28800

修改后重启MySQL服务。

4. 单连接模式下添加自动重连(备选)

若坚持使用单连接,可添加错误监听实现自动重连:

const db = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "pass@",
  database: "mydb",
});

// 监听连接错误,自动重连
db.on('error', function(err) {
  if (err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET') {
    console.log('数据库连接断开,正在重连...');
    db.connect();
  } else {
    throw err;
  }
});

// 初始化连接
db.connect();

内容的提问来源于stack exchange,提问作者Rafeeq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:35:06