Node.js http-proxy服务触发connResetException异常崩溃如何处理
问题解答
你看到的方案不合理,无法解决现有崩溃问题
listen回调中的错误处理只能捕获代理服务启动阶段的错误(比如端口被占用、无监听权限等),你遇到的ECONNRESET是代理运行过程中与目标服务器连接异常产生的运行时错误,这个位置的逻辑完全捕获不到这类错误。
正确处理方案
http-proxy模块的代理实例会通过error事件抛出所有运行时的连接、请求相关异常,你只需要给proxy实例添加error事件监听即可,不需要修改原有逻辑,直接在现有代码末尾添加如下代码即可:
proxy.on('error', function (err, req, res) { // 打印错误日志方便排查问题 console.error('代理请求错误:', err.code, err.message); // 给请求方返回统一错误响应,避免请求挂起 if (!res.headersSent) { res.writeHead(502, { 'Content-Type': 'application/json' }); } res.end(JSON.stringify({ SessionID: '', ErrorMsg: '上游服务连接异常', ErrorCode: 502 })); });
添加该逻辑后,socket hang up、ECONNRESET这类代理运行时错误都会被捕获,不会再抛出未处理异常导致进程崩溃。
额外可选加固策略
如果需要进一步避免其他未捕获异常导致进程崩溃,可以在代码最外层添加全局异常兜底逻辑:
process.on('uncaughtException', function (err) { console.error('全局未捕获异常:', err); });
内容的提问来源于stack exchange,提问作者fsallstrom
相关产品推荐
相关产品推荐

