首页 > 解决方案 > 在 mqtt.js 中发布无法访问的主题时如何捕获“访问错误”?

问题描述

我正在使用带有 mqtt.js 和 mosquitto 代理的 node.js 创建一个项目。在 mosquitto 配置文件中,我设置了一个 pwfile,aclfile 来控制哪个用户可以访问哪个主题。

如果用户名、密码、发布主题和订阅主题正确,一切正常。

但是,如果我将发布主题更改为无法访问的主题,似乎成功发布了该主题而 mqtt.js 中没有任何错误,但消息从未发布过。

发布或订阅无法访问的主题时是否有捕获错误?

https://github.com/mqttjs/MQTT.js/blob/master/README.md#publish

我尝试使用 qos=1 捕获回调函数中的错误,但似乎 mosquitto 代理确认客户端没有任何错误。当然,消息没有发布到主题,因为该客户端没有访问该主题的权限。

client.publish('inaccessible_topic', 'hello world', {qos: 1}, (err) => {
  if (err) console.log('error occur: ', err);
  else console.log('message successfully publish');
});

我希望 mosquitto 在发布到无法访问的主题时会返回某种错误(error occur: <error message>),但它没有(message sucessfully publish)。

我想知道是否有可能捕捉到这样的错误。mosquitto 是否处理此类错误,如果是,我如何使用 mqtt.js 捕获此类错误?

标签: node.jsmqttmosquitto

解决方案


你没有。

如果代理尝试发布到它无权访问的主题,它不会告诉客户端,它只会默默地丢弃消息。

这将是一个安全漏洞,因为它会暴露可用的主题。


推荐阅读