Node.js NodeJ使用凭据和SSL连接到MQTT服务器
我试图用NodeJS连接到MQTT服务器,但它根本没有连接。这是我正在使用的代码:Node.js NodeJ使用凭据和SSL连接到MQTT服务器,node.js,mqtt,Node.js,Mqtt,我试图用NodeJS连接到MQTT服务器,但它根本没有连接。这是我正在使用的代码: const mqtt = require('mqtt'); function Connect(serverName,serverUsername,serverPassword,port,topic,clientName) { try{ //const client = new mqtt.connect('mqtt://'+serverName); const client = new mqtt.con
const mqtt = require('mqtt');
function Connect(serverName,serverUsername,serverPassword,port,topic,clientName) {
try{
//const client = new mqtt.connect('mqtt://'+serverName);
const client = new mqtt.connect('mqtts://'+serverName,{rejectUnauthorized:false,username:serverUsername,password:serverPassword,connectTimeout:5000});
console.log('--connecting');
client.on('connect',function(){
console.log('--connected');
client.subscribe(topic,function(err){
console.log('--subscribed');
if (!err) {
client.publish(topic,"hello 2");
}
});
});
client.on('message',function(tp,msg){
console.log(msg.toString());
client.end();
});
} catch(e) {
console.log(e);
}
}
Connect('mqtt.example.com','myusername','mypassword',9101,'test','NodeApp');
当我运行上面的代码时,client.subscribe
中的console.log
语句都不会触发。我使用这些命令测试了MQTT服务器,我的所有订阅和发布的消息都可以正常工作:
mosquitto_sub -h mqtt.example.com -p 9101 -t "test" -u "myusername" -P "mypassword" --capath /etc/ssl/certs/
mosquitto_pub -h mqtt.example.com -p 9101 -t "test" -m "This is my message" -u "myusername" -P "mypassword" --capath /etc/ssl/certs/
我做错了什么?您正在使用mqtts://但尚未在连接的选项部分定义SSL证书:
var caFile = fs.readFileSync("myCAFile");
var certFile = fs.readFileSync("myCertFile");
var keyFile = fs.readFileSync("myKeyFile");
var opts = {
rejectUnauthorized: false,
username: serverUsername,
password: serverPassword,
connectTimeout: 5000,
ca: [ caFile ],
cert: certFile,
key: keyFile
}
const client = new mqtt.connect('mqtts://'+serverName, opts);
...
对于mqtt模块,您必须提供SSL证书,即使它只是自己生成的证书
虽然您应该捕获错误…MQTT代理日志文件说明了什么?您正在使用mqtts://但尚未在连接的选项部分定义SSL证书:
var caFile = fs.readFileSync("myCAFile");
var certFile = fs.readFileSync("myCertFile");
var keyFile = fs.readFileSync("myKeyFile");
var opts = {
rejectUnauthorized: false,
username: serverUsername,
password: serverPassword,
connectTimeout: 5000,
ca: [ caFile ],
cert: certFile,
key: keyFile
}
const client = new mqtt.connect('mqtts://'+serverName, opts);
...
对于mqtt模块,您必须提供SSL证书,即使它只是自己生成的证书
虽然您应该捕获错误…MQTT代理日志文件说了什么