如何解决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
相关产品推荐
相关产品推荐

