为了账号安全,请及时绑定邮箱和手机立即绑定

Nodejs MQTT:取消订阅不是一个函数

Nodejs MQTT:取消订阅不是一个函数

心有法竹 2023-03-18 16:31:55
我很好地实施了 MQTT,但我遇到了方法问题unsubscribe。mqttCon.publish() , mqttCon.subscribe(), mqttCon.on()...除此以外,所有其他功能 ( ) 都运行良好。我已经检查了拼写,甚至完成了ctrl +click它,它把我带到了库实现,这意味着它是正确的方法并且引用得很好,但我一直收到下面的错误。我该如何解决?这是一行: mqttCon.unsubscribe(topic)TypeError: mqttCon.unsubscribe is not a function    at noopHandler (/home/dev/project-dir/src/mqtt/processMessage.js:5:13)    at module.exports (/home/dev/project-dir/src/mqtt/processMessage.js:10:20)    at MqttClient.client.on (/home/dev/project-dir/src/mqtt/mqttCon.js:16:13)    at MqttClient.emit (events.js:189:13)    at MqttClient._handlePublish (/home/dev/project-dir/node_modules/mqtt/lib/client.js:1271:12)    at MqttClient._handlePacket (/home/dev/project-dir/node_modules/mqtt/lib/client.js:410:12)    at work (/home/dev/project-dir/node_modules/mqtt/lib/client.js:321:12)    at Writable.writable._write (/home/dev/project-dir/node_modules/mqtt/lib/client.js:335:5)    at doWrite (/home/dev/project-dir/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:428:64)    at writeOrBuffer (/home/dev/project-dir/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:417:5)注意:我使用的是 ES6(Emacscript 6+) javascript 而不是Typescript。节点12.18.1和 npm6.14.6这是我的连接代码mqttCon.js:const mqtt = require('mqtt')const processMessage = require('./processMessage')const logger = require('../logConf')const options = {    host: '',    port: '',    username:'',    password: '',    protocol: ''};const client = mqtt.connect(options)client.on("connect", function () {    console.log("MQTT connected  with status: " + client.connected);    if (client.connected) {        client.on('message', (topic, message) => {            processMessage(topic, String(message))        })    }})
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

你的 mqttCon.js 文件没有client.prototype.unsubscribe = function() {},所以错误是正确的。您正在定义client为一个模块,但您确实需要mqtt.unsubscribe()在某个地方调用。因此,您需要unsubscribe()向常量添加一个函数client(在这种情况下实际上应该是一个函数var),或者mqtt.unsubscribe()在您的 processMessage.js 文件中需要 mqtt 模块后调用该函数....我认为这与您正在尝试的相反无论如何要做。


更新:以上影响了我的想法,问题是我正在导入processMessage.js哪个mqttCon.js又导入了哪个。循环导入,意思是mqttCon(mqttClient) was always not yet initialized inside processMessage.js. 解决方案是当客户端已经初始化并导出为如下模块时,我processMessage.js在块内导入:client.on('connect'....)...



client.on("connect", () => {

    console.log("MQTT connected  with status: " + client.connected);

    if (client.connected) {

        client.on('message', (topic, message) => {

            require('./processMessage')(topic, String(message))

        })

    }

})


查看完整回答
反对 回复 2023-03-18
  • 1 回答
  • 0 关注
  • 378 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号