【发布时间】:2019-11-22 13:57:07
【问题描述】:
我正在使用 http-proxy-middleware 将一些 API 端点代理到我的 Create React App 开发服务器。
我最近引入了一个 WebSocket 端点,我在 setupProxy.js 中使用以下代码对其进行代理:
const proxy = require('http-proxy-middleware');
const target = 'http://localhost:8000';
module.exports = function(app) {
[...] // other proxies for HTTP endpoints
app.use(proxy('/api/ws', { ws: true, target }));
};
我遇到的问题是,如果我重新启动后端,并且 WebSocket 连接中断,整个开发服务器会崩溃:
[HPM] Upgrading to WebSocket
events.js:170
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:171:27)
Emitted 'error' event at:
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:81:17)
error Command failed with exit code 1.
我想知道如何优雅地处理 WebSocket 代理中的错误,以便服务器不会崩溃,而是等待 WebSocket 再次可用?
【问题讨论】:
-
您的意思是,您的 WebSocket 正在尝试在目标启动之前连接到目标?
-
WebSocket 服务器起来了,express 服务器起来了,它找到了WebSocket,一切正常。然后,突然,WebSocket 服务器重新启动,我得到了错误。
-
你使用什么版本的节点?你能发布你的
package-lock.json吗? -
是节点11.15.0,不幸的是我无法发布锁定文件,但我很确定这不是版本问题,只是套接字断开连接的那一刻我应该处理不知何故出错。
-
好吧,我无法在节点 v13.0.0、
express4.17.1、http-proxy1.18.0、http-proxy-middleware0.20.0 上重现此问题。代理在控制台中记录ECONNRESET并继续运行。也许实际上您应该将其视为(其中一个)库中的错误。
标签: node.js express websocket http-proxy-middleware