如何将此命令转换为MQTT.js?


  1. 我已经有一个Aws物联网设置。

  2. 我有一个react native简单的应用程序,运行在android模拟器。

  3. 我已经实现了这个库https://www.npmjs.com/package/react-native-native-mqtt.

  4. 我有我的pem, crt和密钥存储在%USERPROFILE%cert .

  5. 我在cmdmqtt pub --cafile %USERPROFILE%certsroot-ca.pem --cert %USERPROFILE%certscertificate.pem.crt --key %USERPROFILE%certsprivate.pem.key -d -h ******-ats.iot.us-east-2.amazonaws.com -p 8883 -t test -m "hello there"

    中运行这个命令
  6. 我检查。它出现在Aws物联网测试控制台,我订阅了test

目前没有错误发生。

我有这个代码在我的react native:

const mqtt = require('mqtt')
const fs = require('fs')
// const KEY = fs.readFileSync('%USERPROFILE%certsprivate.pem.key');
// const CERT = fs.readFileSync('%USERPROFILE%certscertificate.pem.crt');
// const CAfile = [fs.readFileSync('%USERPROFILE%certsroot-ca.pem')];
const KEY = './aws/private.pem.key';
const CERT = './aws/certificate.pem.crt';
const CAfile = ['./aws/root-ca.pem'];
const options = {
host: "******-ats.iot.us-east-2.amazonaws.com",
port: 8883,
protocolId: 'MQIsdp',
ca: CAfile,
keyPath: KEY,
certPath: CERT,
secureProtocol: 'TLSv1_method',
protocolVersion: 3
};
const client  = mqtt.connect(options)
client.on('connect', function () {
client.subscribe('test', function (err) {
if (!err) {
client.publish('test', 'Hello mqtt')
}
})
})
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString())
client.end()
})

我已经尝试过使用fs,它导致错误fs.readFileSync is not a function
所以,我使用这个路径'./aws/private.pem.key''./aws/certificate.pem.crt''./aws/root-ca.pem'

错误:

WebSocket连接到'ws://localhost:8883/'失败:错误连接建立:net::ERR_CONNECTION_REFUSEDcreateBrowserWebSocket @ js:108 browserStreamBuilder @ js:134包装器@ index.js:154../../../../../../../../../文档/_msit/物联网/轮2/mqttks/node_modules/mqtt/lib/client.js.MqttClient。_setupStream @client.js: 298 ../../../../../../../../../文档/_msit/物联网/轮2/mqttks/node_modules/mqtt/lib/client.js.MqttClient。_reconnect @Client.js:938(匿名)@ Client.js:958

我想知道为什么它是本地主机,即使我设置了主机。

所以,我的问题,我如何将这个命令转换为工作mqtt pub --cafile %USERPROFILE%certsroot-ca.pem --cert %USERPROFILE%certscertificate.pem.crt --key %USERPROFILE%certsprivate.pem.key -d -h ******-ats.iot.us-east-2.amazonaws.com -p 8883 -t test -m "hello there"到MQTT.js, Javascript, mqtt.connect()?

未在options中指定hostport。您的connect()调用应该看起来像这样:

const HOST = "******-ats.iot.us-east-2.amazonaws.com";
const PORT = 8883;
const options = {
protocolId: 'MQIsdp',
ca: CAfile,
keyPath: KEY,
certPath: CERT,
secureProtocol: 'TLSv1_method',
protocolVersion: 3
};
var uri = "mqtt://" + HOST + ":" + PORT;
const client = mqtt.connect(uri, options);

你的问题类似于已经在StackOverflow上回答的问题:为什么MQTT不与NodeJS连接?

最新更新