我正在使用Webpack构建React前端,同时将后端作为一个单独的进程运行,并使用Webpack开发服务器将请求代理到后端。常规API请求代理服务器很好,但当我尝试使用ws: true
选项添加任何代理服务器时,在加载本地主机上Webpack开发服务器提供的页面后,我开始得到以下错误和每秒重复的堆栈跟踪。
<i> [webpack-dev-server] [HPM] Upgrading to WebSocket
<e> [webpack-dev-server] [HPM] WebSocket error: Error [ERR_STREAM_WRITE_AFTER_END]: write after end
<e> at new NodeError (node:internal/errors:372:5)
<e> at _write (node:internal/streams/writable:319:11)
<e> at Socket.Writable.write (node:internal/streams/writable:334:10)
<e> at Sender.sendFrame (C:\code\line-up\line-up-client\node_modules\ws\lib\sender.js:469:20)
<e> at Sender.close (C:\code\line-up\line-up-client\node_modules\ws\lib\sender.js:197:12)
<e> at WebSocket.close (C:\code\line-up\line-up-client\node_modules\ws\lib\websocket.js:300:18)
<e> at Receiver.receiverOnConclude (C:\code\line-up\line-up-client\node_modules\ws\lib\websocket.js:1114:18)
<e> at Receiver.emit (node:events:527:28)
<e> at Receiver.controlMessage (C:\code\line-up\line-up-client\node_modules\ws\lib\receiver.js:582:14)
<e> at Receiver.getData (C:\code\line-up\line-up-client\node_modules\ws\lib\receiver.js:429:42) {
<e> code: 'ERR_STREAM_WRITE_AFTER_END'
<e> }
我的代理配置如下:
proxy: {
'/api/*': {
target: 'http://localhost:5150',
pathRewrite: { '^/api': '' },
},
'/ws': {
target: 'ws://localhost:5150',
ws: true,
}
},
我的后端侦听http://localhost:5150
上的常规HTTP API请求,WebSocket端点位于localhost:5150/ws
。
我尝试过的事情:
- 将
/ws
代理的目标设置为使用http
协议。 - 将
/ws
代理的目标设置为转到/ws
路径。 - 在两个代理对象上设置
ws: true
。 - 各种其他排列。
我的客户端源代码不是启动失败的WebSocket连接的源代码,该代码被删除,错误仍然存在。
下面是我的package.json
中的一段摘录,显示了相关的版本:
"webpack": "^5.72.1",
"webpack-cli": "^4.9.2",
"webpack-dev-server": "^4.9.0"
编辑:
我尝试代理Webpack dev服务器用于执行HMR的路径时,会出现错误循环。将配置和端点更改为使用/websocket
而不是/ws
,并将代理更改为:
'/websocket': {
target: 'http://localhost:5150',
ws: true,
}
我在客户端得到了一个WebSocket连接错误。我有一个静态的vanilla JS页面,我用来测试没有Webpack的后端,它工作正常,所以我认为问题是与Webpack/客户端代码的地方。
1条答案
按热度按时间qncylg1j1#
嗯......
分享我的案例。
我正在http 8080端口上运行react应用程序(子前端应用程序)
运行其他端口的主要前端应用程序
而Httppd通过基于名称的虚拟主机为所有应用提供服务。
(主机文件已编辑)
1.打开主要应用程序“https://majorapp.mydomain.com“
1.单击按钮打开子应用程序“https://subapp.mydomain.com“
1.收到相同的错误,如“WebSocket...”
我认为webpack-dev-server软件包出错
因此请编辑“/webpack-dev-server/client/utils/parseURL.js”文件
向38行添加行
如果您有任何问题,请联系我们。如果您有问题,请联系我们。'ws'
并对其进行修补(请在www.example.com上查看“patch-package”软件包npmjs.org)
并再次运行webpack-dev-server!