如何在 vue-cli 应用程序中为 WebSocket 代理正确设置 devServer

Posted

技术标签:

【中文标题】如何在 vue-cli 应用程序中为 WebSocket 代理正确设置 devServer【英文标题】:How to correctly setup devServer for WebSocket proxying in a vue-cli app 【发布时间】:2020-12-31 12:40:21 【问题描述】:

我有一个 Node.JS 服务器在 http://localhost:8080 运行,有 2 条路由:

"/":服务 /public/index.html"/rest":返回 ok: true

此服务器也在同一端口上运行 Websocket 连接。在 index.html 中,我使用 const socket = new WebSocket("ws://" + window.location.host) 连接到服务器。

当我运行此服务器并访问 http://localhost:8080 时,以下工作:

提供索引:是 ✅ 返回的 JSON:是 ✅ WebSocket 消息传递:是 ✅

此外,我还在 http://localhost:8079 使用以下 vue.config.js 以开发模式运行 vue-cli 应用程序 配置:

...
devServer: 
  port: 8079,
  "/": 
    target: "http://localhost:8080/",
    ws: true
  ,

当我运行这个应用程序并访问 http://localhost:8079 时,会发生以下情况:

已提供索引:是 ✅,这意味着代理正在为此路由工作。 返回的 JSON:是 ✅,这意味着代理正在为此路由工作。 WebSockets 消息:否❌,我收到错误 “WebSocket 连接到 'ws://localhost:8079/' 失败:连接建立错误:net::ERR_CONNECTION_REFUSED”

我做错了什么?我该如何解决?

如您所见,我已经包含了 ws: true,它也用于代理 WebSocket 连接。

【问题讨论】:

【参考方案1】:

我在 vue.config.js 中有以下内容:

  devServer: 
    proxy: 
      '^/': 
        target: 'http://localhost:8089',
        ws: true,
        changeOrigin: true
      
    
  

websocket 后端在 8089 端口上运行。 所有 ws 流量都代理到后端。

【讨论】:

以上是关于如何在 vue-cli 应用程序中为 WebSocket 代理正确设置 devServer的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue-cli 中设置生产构建路径?

如何使用 vue-cli 3 创建两个单独的包?

如何使用 Laravel index.php 服务 Vue-CLI

vue-cli开发模式如何与服务端api结合?

当我尝试在 vue-cli@4.5.13 上创建应用程序时,它卡住了。我该如何解决?

在vue-cli环境下模拟数据接口及如何应用mockjs