如何在 mqtt.js 中发布无法访问的主题时捕获 "access error"?

How to catch "access error" when publish inaccessible topic in mqtt.js?

我正在使用 node.js 和 mqtt.js 以及 mosquitto 代理创建一个项目。 在 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 在发布到无法访问的主题时会 return 某种错误 (error occur: <error message>),但它不会 (message sucessfully publish)。

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

你不知道。

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

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