Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';t连接到aedes MQTT代理_Node.js_Mqtt_Aedes - Fatal编程技术网

Node.js Can';t连接到aedes MQTT代理

Node.js Can';t连接到aedes MQTT代理,node.js,mqtt,aedes,Node.js,Mqtt,Aedes,我有一个MQTT代理和我的MQTT客户机,但我似乎无法连接它们 在我的app.js中,我执行以下操作: (async function () { try { await startBroker(); await mqttClient(); } catch (e) { console.error("ERROR: ", e); process.exit(); } })(); 我的startBroker函数启动aedes并按如下方式流式处理: const

我有一个MQTT代理和我的MQTT客户机,但我似乎无法连接它们

在我的
app.js
中,我执行以下操作:

(async function () {
  try {
    await startBroker();
    await mqttClient();
  } catch (e) {
    console.error("ERROR: ", e);
    process.exit();
  }
})();
我的startBroker函数启动aedes并按如下方式流式处理:

const aedes = require('aedes')();
const server = require('net').createServer(aedes.handle);
const port = 1883;

exports.startBroker = function() {
    return new Promise((res, rej) => {
        server.listen(port, function () {
            console.log(`MQTT Broker started on port ${port}`);
            return res()
        });
    })
};
然后我的
mqttClient
尝试连接,但我永远无法真正连接。我已经在测试mosquitto服务器上对其进行了测试,该服务器运行良好

const mqtt = require('mqtt');

const client = mqtt.connect("mqtt://localhost:1883");

exports.mqttClient = function() {
    console.log("Connecting to MQTT Client");
    client.on("connect", ack => {
        console.log("MQTT Client Connected!");

        client.on("message", (topic, message) => {
            console.log(`MQTT Client Message.  Topic: ${topic}.  Message: ${message.toString()}`);
        });
    });

    client.on("error", err => {
        console.log(err);
    });
}
有人知道为什么我的经纪人似乎不起作用吗?

你能澄清一下,经纪人是如何不起作用的,以及实际上起作用的是什么吗在哪里和如何运行代码

当我将代码放入单个文件(将
导出。
更改为
常量
)时,它确实起作用。我必须在
mqttClient
的函数声明后添加分号,但之后,我得到以下控制台输出:

MQTT代理已在端口1883上启动
连接到MQTT客户端
MQTT客户端已连接

这是可以立即复制的完整代码。它在macOS 10.15 Catalina上的Node.js v12.15.0中运行

const aedes=require('aedes')();
const server=require('net').createServer(aedes.handle);
常数端口=1883;
//exports.startBroker=函数(){
常量startBroker=函数(){
返回新承诺((res,rej)=>{
侦听(端口、函数(){
log(`MQTT代理在端口${port}`上启动);
返回res()
});
})
};
常量mqtt=require('mqtt');
const client=mqtt.connect(“mqtt://localhost:1883");
//exports.mqttClient=函数(){
常量mqttClient=函数(){
log(“连接到MQTT客户机”);
client.on(“connect”,ack=>{
log(“MQTT客户端已连接!”);
client.on(“消息”,(主题,消息)=>{
log(`MQTT Client Message.Topic:${Topic}.Message:${Message.toString()}`);
});
});
client.on(“error”,err=>{
控制台日志(err);
});
}; //