angular - 使用 Angular 和 Aedes 设置 MQTT 代理
问题描述
我在 Stackoverflow 上找到了一个简单的 MQTT 代理示例:
Typescript / MQTT / Node - 如何从回调函数访问类成员?
但是当我尝试重新创建它时出现错误:
This expression is not callable:
this.aedes=aedes();
它说它找不到这个函数 aedes()。我的代码有什么问题?
代码:
经纪人.ts
import * as aedes from 'aedes';
import * as net from 'net';
export class Broker {
aedes: aedes.Aedes;
broker: net.Server;
port: number;
constructor(port: number){
this.aedes=aedes();
this.broker = net.createServer(this.aedes.handle);
this.port = port;
this.broker.listen(this.port, () => {
console.log('MQTT is listening.');
});
}
/**
* This is a callback register function
*
* Callback function must have a signature of type : function(topic: string, payload: string)
**/
onMsgReceived(callback: {(topic: string, payload: string): void}){
this.aedes.on('publish', (packet, client) => {
if (packet.cmd != 'publish') return;
callback(packet.topic, packet.payload.toString());
});
}
}
测试.ts
export class Test {
someVar: string;
constructor() {
this.onMsgReceivedCallback = this.onMsgReceivedCallback.bind(this);
}
onMsgReceivedCallback(topic: string, payload: string) {
console.log(`someVar: ${this.someVar}`);
}
}
main.ts
import { Broker } from './broker'
import { Test } from './test'
console.log("main.ts");
const broker = new Broker(1883);
const broker2 = new Broker(4340);
const test = new Test();
broker.onMsgReceived(test.onMsgReceivedCallback);
谢谢您的帮助!
解决方案
我遇到了类似的问题,并且能够使用以下更改来解决它:
constructor(port: number){
// this.aedes=aedes();
this.aedes = aedes.Server();
this.broker = net.createServer(this.aedes.handle);
this.port = port;
this.broker.listen(this.port, () => {
console.log('MQTT is listening.');
});
}
推荐阅读
- c++ - 指向对象的指针的继承问题
- scala - 如何在 Scala 的 Apache Flink Datastream 中转换字符串?
- java - M1 Macbook Pro Docker 问题 Gradle 和 JDK
- java - 无法使用 Gradle 创建 jar 文件
- sql - 从 SAS 面板数据中创建具有“结束日期”的列
- ios - Core Data 嵌套数组计数
- reactjs - GET 请求中的数据未从状态传递到道具
- php - WooCommerce | woocommerce_email_before_order_table 函数调用不适用于初始电子邮件发送,但适用于状态更改
- pandas - 使用日期时间格式从数据框列中删除时区
- javascript - 带有摘要行的 ExtJS 网格在最后一行不会有“x-grid-item-over”