在Vue中使用MQTTjs指北

最近需要用mqtt做项目,并且是在vue环境中,遇到各种问题,研究了两天,现在记录一下,做个简单的例子,避免再入坑。

0.脚手架中安装mqtt

MQTTjs官方地址:MQTT-Github
在脚手架中使用npm安装到项目:

npm install mqtt --save

官方有一个例子:

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', function () {
  client.subscribe('presence', function (err) {
    if (!err) {
      client.publish('presence', 'Hello mqtt')
    }
  })
})
client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

但是这个例子在vue中怎么用并不明显,现在写一下我的例子:

1.在vue文件中引入mqtt

import mqtt from 'mqtt'

2.在data中声明client对象

data() {
    return {
      mtopic: "1101",
      msg: "",
      client: {}
    };
  }

3. 在mounted钩子中建立连接

mounted() {
    this.client = mqtt.connect("ws://ip:port", {
      username: "admin",
      password: "password"
    });
    this.client.on("connect", e =>{
      console.log("连接成功");
      this.client.subscribe(this.mtopic, (err) => {
        if (!err) {
          console.log("订阅成功:" + this.mtopic);
        }
      });
    });
    this.client.on("message", (topic, message) => {
      this.msg = message
    });
  }

这里需要注意this指向问题,刚开始的时候因为写的函数所以一直报错,后来把里面的函数换成箭头函数就好了。

4. 可以把发布消息函数写到methods里面

methods: {
    handleclick: function() {
      this.client.publish(this.mtopic, this.msg);
    }
  }

最后贴上完整代码

//vue单文件
<template>
  <div class="hello">
    <h1>收到的消息:{{msg}}</h1>
    <button @click="handleclick">发布</button>
  </div>
</template>

<script>
import mqtt from "mqtt";
export default {
  name: "HelloWorld",
  data() {
    return {
      mtopic: "1101",
      msg: "lalala",
      client: {}
    };
  },
  mounted() {
    this.client = mqtt.connect("ws://ip:port", {
      username: "admin",
      password: "password"
    });
    this.client.on("connect", e =>{
      console.log("连接成功");
      this.client.subscribe(this.mtopic, (err)=> {
        if (!err) {
          console.log("订阅成功:" + this.mtopic);
        }
      });
    });
    this.client.on("message", (topic, message) => {
      this.msg = message
    });
  },
  methods: {
    handleclick: function() {
      this.client.publish(this.mtopic, this.msg);
    }
  }
};
</script>
Vue使用MQTT,你可以使用MQTT.js库来实现。以下是一些基本步骤: 1. 安装MQTT.js库:在你的Vue项目使用npm或yarn安装mqtt库: ``` npm install mqtt ``` 或 ``` yarn add mqtt ``` 2. 导入MQTT库:在你的Vue组件,导入mqtt库: ```javascript import mqtt from 'mqtt'; ``` 3. 创建MQTT客户端:在Vue组件,创建一个MQTT客户端实例,并连接到MQTT代理: ```javascript const client = mqtt.connect('mqtt://mqtt.example.com'); // 替换为你的MQTT代理地址 ``` 4. 监听MQTT连接状态:可以监听MQTT客户端的连接状态,以便在连接成功或失败时进行处理: ```javascript client.on('connect', function () { console.log('Connected to MQTT broker'); }); client.on('error', function (error) { console.error('MQTT connection error:', error); }); ``` 5. 订阅和接收消息:可以订阅一个或多个主题,并在接收到消息时进行处理: ```javascript client.subscribe('topic1'); client.on('message', function (topic, message) { console.log('Received message:', message.toString()); }); ``` 6. 发布消息:可以使用`client.publish()`方法发布消息到指定的主题: ```javascript client.publish('topic1', 'Hello MQTT'); ``` 这些是基本的使用步骤,你可以根据需要进行扩展和自定义。记得在不需要时断开MQTT连接: ```javascript client.end(); ``` 请注意,这只是一个简单的示例,实际使用时可能需要处理更多的逻辑和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值