create-react-app CRA服务器断开了我的websocket连接,

w8rqjzmb  于 3个月前  发布在  React
关注(0)|答案(4)|浏览(48)

我正在使用http-proxy-middleware来拦截来自应用程序的websocket请求,因为我需要将cookies发送给BE。由于Chrome不会将cookies附加到外部域,所以我的唯一解决方案是代理请求并通过CRA服务器建立websocket连接。
这是我在setupProxy.js中的配置:
我正在运行一个端口为8080的Node.js演示服务器,/testws是连接websocket的端点。这是我尝试连接websocket的方式,我使用的是标准的JS websocket。
注意:我使用wss,因为项目是通过https提供的,而在ws中无法连接到代理。
当我连接到代理时,终端下的输出如下:
服务器只是断开连接,没有抛出错误,代理配置中的onError回调也没有记录,它只是立即断开连接,甚至不连接到服务器。我在Node.js服务器上的每个连接上都记录了一条消息,但根本没有记录。
如果我不使用代理像这样连接到服务器,我可以连接到服务器

,但是那时Chrome也不会将cookies附加到请求中,我需要它们与我们的真实BE进行身份验证。
非常感谢各种建议。此外,BE也无法更改,因此请不要建议与BE相关的更改。我只需要让CRA应用程序建立连接。如果不可能的话(我怀疑),那么我们将考虑更改BE。

6qqygrtg

6qqygrtg1#

我也有同样的问题。

ztyzrc3y

ztyzrc3y2#

在这里也是一样。当我从npm run build的websocket连接提供生产构建输出时,工作正常,但是使用开发服务器时,连接立即中断。

gywdnpxw

gywdnpxw3#

我可能浪费了很多天的时间尝试升级到react-scripts@5.0.1。它拒绝启动。它可以正常编译,但是开发服务器会立即断开与任何客户端的连接。显然,这个升级不能发布到生产环境。最后,我发现删除我的setupProxy.js文件解决了这个问题。所以我认为setupProxy需要以某种方式改变,或者需要解决一个问题。不幸的是,我需要setupProxy.js来代理Firebase的请求。
更新:
好的,对我来说,这样做是有效的:

  1. 删除 setupProxy.js (修复开发服务器无法使用react-scripts@5.0.1启动的问题)
  2. 在 package.json 中添加 "proxy": " http://localhost:5000 " (重新启用代理)
    请注意,我不认为这个问题是特定于websocket的,而是与http-proxy-middleware的兼容性问题。如果你正在使用websockets,你应该用你的setupProxy中的websocket地址替换代理(即 "proxy": "ws://localhost:8080/testws")。我不确定如何使用这种方法配置要转发的路径,这就是为什么它不是理想的解决方案,但当我将路径设置为/api时,它对我有效。
yruzcnhs

yruzcnhs4#

你好!
你解决了这个问题吗?

相关问题