Node应用在firebird.attach回调内发布MQTT消息失败问题咨询
问题原因及解决方法
- 核心原因:你在全局MQTT客户端的
message事件回调中调用了client.end(),只要客户端收到任意一条MQTT消息就会主动断开连接,后续在firebird回调中执行client.publish时,客户端已经处于断开状态,自然无法成功发送消息,这和你把代码写在firebird.attach块内没有关系,firebird.attach块内完全可以正常运行MQTT代码,没有运行限制。 - 修复方案:删除
client.on('message', ...)回调中的client.end()语句即可,保持MQTT客户端长连接运行,后续在firebird.attach内部的数据库操作回调中就能正常发布消息。
额外优化建议
- 可以给
client.publish增加错误回调,方便定位发送环节的异常,示例代码如下:
client.publish('timeclock', 'clocked in', (err) => { if (err) { console.log('MQTT消息发送失败:', err) } else { console.log('MQTT sent') } })
- 你当前的代码只在
/clock-in/:id接口的成功回调中加入了MQTT发布逻辑,如果/clock-out/:id接口也需要发送MQTT消息,记得对应补充代码。
内容的提问来源于stack exchange,提问作者daneee
相关产品推荐
相关产品推荐

