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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:01:25