我的客户想让一个 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 文件夹下运行,就像部署在其他地方并建立这种连接一样。