You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:15:04