1、首先我们要初始化一个文件夹

npm init 

2、安装koa

npm install koa

3、新建app.js文件并写入以下代码 

//引入Koa
const koa=require('koa');
const app=new koa();
//配置中间件
app.use( async (ctx)=>{
 ctx.body='hello koa2'
})
//监听端口
app.listen(3000);
//本地终端打印log
console.log('[demo] start-quick is starting at port 3000')

 代码写入完成后再终端运行输入以下命令

node app.js

在浏览器访问3000端口,会出现

 4、安装mqtt

npm install mqtt

在代码中导入mqtt 并进行连接

//引入Koa
const koa=require('koa');
const mqtt = require("mqtt");
const app=new koa();
//配置中间件
app.use( async (ctx)=>{
 ctx.body='hello koa2'
})

const caPem = fs.readFileSync(path.join(__dirname, './tool/ca.pem'))

const mqtt5ClientKey = fs.readFileSync( path.join(__dirname, "./config/mqtt5Client.key"));
const mqtt5ClientPem = fs.readFileSync(path.join(__dirname, "./config/mqtt5Client.pem"));

const connectUrl = `ws://broker.emqx.io:8083/mqtt`
// 这个需要替换成自己公司部署出来的mqtt 
const client = mqtt.connect(connectUrl, {

      clientId: ffLockApi + new Date().getTime(),
      username: 'admin',//公司mqtt用户名称
      password: '12345',//密码 如果没有公司的,可以直接使用上面这条进行测试连接,可以行的通的

      // 如果不是公司或者个人mqtt服务,下面的可以不用
      key: mqttConfig.key,//key cert ca 这个是连接私人服务的密钥
      cert: mqttConfig.cert,
      rejectUnauthorized: true,
      ca: mqttConfig.ca,
      reconnectPeriod: 5000,
      connectTimeout: 30 * 1000,
      keepalive: 30 // emqtt必须设置keepalive的参数,否者会断开重连多次

});


// 需要订阅的主题
// const topic = 'test'; //这个实际应用自己需要监听的通道
//成功连接后触发的回调
client.on("connect", () => {
  console.log("已经连接成功");
  // 这里可以订阅多个主题
  client.subscribe([topic], () => {
    console.log(`订阅了主题 ${topic}`);
  });
});

// 当客户端收到一个发布过来的消息时触发回调
client.on("message", function (topic, message) {
  // 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
  //   let data = JSON.parse(message.toString());
  console.log("返回的数据:", message);
  console.log("返回的通道:", topic.toString());
});

// 连接断开后触发的回调
client.on("close", function () {
  console.log("已断开连接");
});
// 连接错误的回调
client.on("error", function () {
  console.log("mqtt error ",error);
});


//发布
setTimeout(() => {
let topic = 'test';
let msg = '123456'
//topic 发送的通道  msg发送内容  //实际应用需要根据自己需求加密等
  client.publish(topic, msg);
},5000);



//监听端口
app.listen(3000);
//本地终端打印log
console.log('[demo] start-quick is starting at port 3000')

不出以为就可以在终端看到订阅监听的通道以及发送的内容

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐