node.js - 在 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 捕获此类错误?
解决方案
你没有。
如果代理尝试发布到它无权访问的主题,它不会告诉客户端,它只会默默地丢弃消息。
这将是一个安全漏洞,因为它会暴露可用的主题。
推荐阅读
- mysql - 在where子句中更新具有相同值的多行 - MySQL,Spring Boot
- math - 相等子集的概念是谬误吗?
- xamarin - CollectionView 在 Xamarin 表单中禁用滚动
- python - 熊猫将整数替换为空字符串(Python)
- c++ - OpenCV/C++-Segmentation fault:mat 乘法后 11
- google-sheets - 如何制作已经很复杂的 Arrayformula 的 Arrayformula?
- javascript - 给定月份的Javascript返回时间字符串
- javascript - 当我单击暗模式按钮时,我也想将暗模式应用于 iframe 标签
- powershell - Atlassian Bamboo - 注入具有“?”的变量 在字符串中,可能的编码问题
- amazon-web-services - 如何在无服务器中引用堆栈输出值?