Node.js Web应用运行一段时间后停止,报ECONNRESET错误求助
解决Node.js应用运行中抛出ECONNRESET错误的方案
ECONNRESET 错误表示网络连接被意外重置,可能是对方服务器主动断开、网络中断,或是你的代码未处理连接错误导致未捕获异常崩溃。以下是具体解决方案:
捕获单个请求的错误事件
所有HTTP/HTTPS请求实例必须绑定error事件监听,避免未捕获异常导致进程崩溃。
原生http/https模块示例:const https = require('https'); const req = https.get('https://your-target-api.com', (res) => { // 处理响应逻辑 }); req.on('error', (err) => { console.error('请求出错:', err.message); // 可在此添加重试、日志上报等处理 });Axios库示例:
axios.get('https://your-target-api.com') .then(res => { /* 处理响应 */ }) .catch(err => { console.error('请求失败:', err.message); // 针对性处理错误,比如ECONNRESET时触发重试 });优化持久连接配置
Node.js默认启用keep-alive,若对方服务器超时关闭空闲连接,易触发该错误。可通过Agent配置控制连接生命周期:const agent = new https.Agent({ keepAlive: true, keepAliveMsecs: 30000, // 30秒后关闭空闲连接 timeout: 5000 // 设置请求超时时间 }); const req = https.get('https://your-target-api.com', { agent }, (res) => { // 处理响应 }); req.on('error', (err) => { if (err.code === 'ECONNRESET') { console.log('连接被重置,执行重试逻辑'); // 在这里重新发起请求 } });排查服务器端或网络环境
- 若请求的是自有后端,检查服务是否有超时设置、内存泄漏导致进程崩溃,或负载均衡/防火墙主动断开空闲连接。
- 测试网络稳定性:用curl/postman持续请求目标接口,确认是否为网络波动或目标服务限流导致。
添加全局异常兜底监听
作为最后防线,避免进程突然崩溃,同时记录异常便于排查:process.on('uncaughtException', (err) => { console.error('未捕获异常:', err); // 执行紧急清理操作(如关闭数据库连接) process.exit(1); // 建议退出进程,避免处于不稳定状态 }); process.on('unhandledRejection', (reason) => { console.error('未处理Promise拒绝:', reason); });
内容的提问来源于stack exchange,提问作者sanjith raghav
相关产品推荐
相关产品推荐

