node.js - 如何使用网络套接字和 Angular CLI 设置代理

标签 node.js angular websocket angular-cli webpack-dev-server

我有一个使用 Angular CLI 构建的简单网络应用程序。我希望它使用网络套接字与后端通信。我已经编写了后端,并使用服务器可以在套接字上发送和接收的简单 index.html 页面进行了测试。

在我的 angular-cli 项目中,我设置了一个代理配置文件来设置到后端的代理。

代理.conf.json

{
  "/sock": {
    "target": "http://localhost:3000",
    "changeOrigin": true,
    "ws": true,
    "logLevel": "debug"
  }
}

然后使用以下命令启动服务器。

ng serve --proxy-config proxy.conf.json

现在我有一个服务,它只是尝试打开一个套接字并发送一个我希望看到后端记录的固定字符串。

import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';

@Injectable()
export class ChatService {

  private socket: any;

  constructor() {
    this.socket = io({ 'path': '/sock' });
    this.socket.emit('chat message', 'Hello World from browser!');
   }

}

注意:无论是否使用 url 的/sock 部分,我都尝试过几次。

我启动了两个服务器。在浏览器中没有控制台错误。但是在 Angular CLI web pack 服务器中,我收到以下消息。

10% building modules 2/2 modules 0 active[HPM] Proxy created: /sock  ->  http://localhost:3000
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]

[HPM] GET /sockjs-node/530/z1z3teld/websocket -> http://localhost:3000
[HPM] Upgrading to WebSocket
[HPM] Error occurred while trying to proxy request /sockjs-node/530/z1z3teld/websocket from localhost:4200 to http://localhost:3000 (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)

是否支持网络套接字,还是我犯了一个愚蠢的错误? 谢谢

最佳答案

经过反复试验,我设法解决了这个问题。我查看了后端项目中工作的基本 index.html 页面的控制台。这个后端项目基本上是 socket.io 网站上的聊天服务器演示应用程序。我注意到当它打开网络套接字时,url 如下所示:

http://localhost:3000/socket.io/EIO=3&transport=websocket&sid=wTvdQTclHXJSUmAmAAAA

回到 Angular CLI 项目,我修改了我的代理配置以包含/socket.io/部分并添加了一个通配符。

{
  "/sock/*": {
    "target": "http://localhost:3000/socket.io/",
    "ws": true,
    "logLevel": "debug"
  }
}

宾果游戏!现在,当构建服务时,它会打开套接字并发出一条消息,我可以看到该消息已记录在后端。

关于node.js - 如何使用网络套接字和 Angular CLI 设置代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007163/

相关文章:

javascript - Node JS 中的 promise 圈内的 promise 圈

node.js - 无法从 docker 映射的端口访问 docker 容器

使用函数调用多次的 Angular @Input 绑定(bind)

javascript - STOMP Web 套接字回调不起作用

node.js - 无法理解 Node.js 监听器

javascript - 无法读取 Angular 中未定义的属性 'find'?

angular - ng e2e 测试超时

ios - 当应用程序进入后台/事件状态时安全地暂停/恢复远程 UIWebView WebSockets

haskell - 在 IO monad 中使用 monad

node.js - WebStorm Node.js使用Docker调试