0

我的客户想让一个 OPs 工程师运行房子的 Node Red 端,但是所有的操作支持人员都使用单页应用程序(并且永远不要接触 Node Red),所以我的一部分人认为示例 uibuilder 页面将创建一个套接字,但如果我有一个角度应用程序并且该套接字也存在,我可以获取我需要的所有数据,而无需将代码组合在一起。随着他们不断扩展用例,ui builder 正在从简单的屏幕组件切换到 1 个端点中的列表、表单、加载器等,具有层、许多内联类,并且没有组织。

我有一个名为“launch”的 NodeRed 示例 UiBuilder,在处理一些示例时,它有一个我可以收听的套接字。我认为如果我可以创建一个不同的应用程序,它也会监听这个套接字,这将是有用的。对于收到的每条消息,如果它不存在于列表中,它会将其添加到列表中,然后我们将从那里开始用户故事。

我想通过我创建的服务在 Angular 应用程序中实现套接字。我用网上找到的一些演示创建了一个简单的客户端-服务器关系,但我现在正试图将它链接到存在的 Node Red uibuilder 启动。

我认为这将像更新 url 或路径一样简单,但这似乎行不通。

这是我正在使用的示例文件:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as io from 'socket.io-client'
import { environment } from 'src/environments/environment';
import * as Rx from 'rxjs/Rx';
export class SocketioService {
  private _socket;
  constructor(){}
  setupSocketConnection(){ 
    this._socket = io.connect(environment.SOCKET_ENDPOINT);
    let observable = new Observable( observer => {
      this.socket.on('msg', (data:string) => {
        console.log("INFO DUMP", data);
        observer.next(data)
      })
      return () => { this.socket.disconnect(); }
    })
    
    let observer = {
      next: (data: Object) => {
        console.log("In Emit.")
        this.socket.emit('msg', JSON.stringify(data));
      }
    }
    return Rx.Subject.create(observer, observable);
  }
}

我的 env 变量是:https://localhost:1800/uibuilder/vendor/socket.io/因为在查找对我创建的示例 /launch 的网络请求时,它看起来像是在这里引用。

这是我正在使用的演示。https://tutorialedge.net/typescript/angular/angular-socket-io-tutorial/用 angular8 创建一些东西。

我还注意到的另一件事是智能感知似乎不喜欢我对这行代码的实现: this._socket = io.connect(...);说“无法在环境上下文中声明访问器”。具体来说:“类型'typeof import(.....node_modules/socket.io-client/build/index')上不存在属性'connect'”

我在想可能需要某种握手来验证套接字,但它似乎永远不会走那么远。

个人资料:

  • 角 8
  • 套餐:
  • rxjs
  • rsjx-兼容
  • 套接字.io
  • socket.io 客户端
  • @types/socket.io-client

我在这里的真正目的是只查看一个示例套接字控制台转储,因此没有真正的前端,只有一个在 :4200 上运行的默认 Angular 应用程序。

我认为应用程序本身不会在 uibuilder 文件夹下运行,就像部署在其他地方并建立这种连接一样。

4

1 回答 1

0

您可以使用 uibuilder 创建 Angular SPA。

uibuilder 将扩展 Node-RED Web 服务以提供您的 SPA 和您选择安装的任何其他前端库。

此外,它还在 Node-RED 和您的 SPA 之间创建了一个 websocket 连接。

因此,您不需要任何其他外部 Web 或 websocket 资源,uibuilder 会为您管理所有这些。


话虽如此,如果您确实需要,可以从不同的网络服务器运行 uibuilder 前端应用程序。它没有经过特别好的测试,它确实需要您手动添加一些配置。在这种情况下,uibuilder 仍然会创建 websocket 连接并为您管理它。

于 2021-02-28T13:51:37.100 回答