最近在uniapp的vue3.0版本中使用mqtt.js库时遇到了一些坑,经过亲身踩坑,现在把实际能够实现在uniapp的app端能够使用mqtt.js的方法步骤记录如下:

一、安装

首先安装mqtt.js,建议使用较为稳定的3.0.0版本:

npm install mqtt@3.0.0

二、引入mqtt.js

import mqtt from 'mqtt/dist/mqtt.js';

三、main.js中配置兼容性

请注意一定要在main.js中增加如下代码:

// #ifndef MP
// 处理 wx.connectSocket promisify 兼容问题,强制返回 SocketTask
uni.connectSocket = (function(connectSocket) {
return function(options) {
console.log(options)
options.success = options.success || function() {}
return connectSocket.call(this, options)
}
})(uni.connectSocket)
// #endif

四、连接并订阅使用

此处有坑,容易出现H5端和app端的兼容问题,请注意以下代码:

// 引入
import mqtt from 'mqtt/dist/mqtt.js'; // 定义连接地址
const connectBaseUrl = `broker.emqx.io:8083/mqtt`;
// 定义客户端id
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`;
// 连接配置
let myOptions = {
clean: true,
connectTimeout: 4000,
reconnectPeriod: 1000,
clientId: clientId,
username: 'emqx_test',
password: 'emqx_test'
} // 注意下面因为兼容性而编写的代码 // #ifdef H5
console.log('h5')
const client = mqtt.connect(`ws://${connectBaseUrl}`, myOptions)
//#endif // #ifdef APP-PLUS
console.log('app')
const client = mqtt.connect(`wx://${connectBaseUrl}`, myOptions)
//#endif // 需要订阅的主题
const topic = 'test'; //成功连接后触发的回调
client.on('connect', () => {
console.log('已经连接成功');
// 这里可以订阅多个主题
client.subscribe([topic], () => {
console.log(`订阅了主题 ${topic}`)
})
}); // 当客户端收到一个发布过来的消息时触发回调
client.on('message', function(topic, message, packet) {
// 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
// let data = JSON.parse(message.toString());
console.log("返回的数据:", message)
mqttResult.value = JSON.parse(message.toString())
}); // 连接断开后触发的回调
client.on("close", function() {
console.log("已断开连接")
}); /**
* 自定义编写的断开连接的方法
*/
const endMqtt = () => {
client.end()
}

经过以上步骤,就可以在app端使用mqtt.js连接了

uniapp中使用mqtt.js的踩坑记录的更多相关文章

  1. nuxt.js实战踩坑记录

    读万卷书不如行万里路,必须实践出真理! 看官方文档安装项目vue init nuxt-community/starter-template <project-name>注意:这是新手项目不 ...

  2. Nuxt.js的踩坑指南(常见问题汇总)

    本文会不定期更新在nuxt.js中遇到的问题进行汇总.转发请注明出处,尊重作者,谢谢! 强烈推荐作者文档版踩坑指南,点击跳转踩坑指南 在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异. 1 ...

  3. ABP框架踩坑记录

    ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...

  4. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...

  5. VUE使用微信JDK(附踩坑记录)

    VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...

  6. manjaro xfce 18.0 踩坑记录

    manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...

  7. 移动端Video标签踩坑记录

    需求 用户能在手机上上传视频并预览. 问题 上传完成后安卓下封面展示正常,ios下封面空白.如下图所示: 利用canvas截取视频第一帧发现,ios下截取到的第一帧一直是空白图片, 安卓正常. 后端利 ...

  8. unionId突然不能获取的踩坑记录

    昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...

  9. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  10. SpringBoot + Shiro + shiro.ini 的踩坑记录

    0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...

随机推荐

  1. jquery给一个li标签添加和去掉class属性

    $("li").addClass('xxx').siblings().removeClass("xxx");

  2. Delphi 执行一个外部程序,当外部程序结束后言主程序立即响应

    delphi 执行一个外部程序,当外部程序结束后言主程序立即响应 我们经常能看到360安全卫士进行windows系统升级时,执行windows升级程序,当升级程序执行完成后,360马上弹出提示框.这样 ...

  3. SQL Server 5105 和 1802 错误的触发方式和解决方式之一

    一般导致这两个错误的原因是:文件路径错误 还有的说,可能是文件权限问题,详情见权限错误纠正方式 错误代码 create database teaching on primary ( name = te ...

  4. 远程连接到轻量应用服务器PG数据库

    不建议这样做,但是开发时方便需要.进入正题. PG是不支持远程连接的,需要连接直接该参数. 在其data目录里,有二个配置文件: pg_hba.conf:配置数据库的访问权限 postgresql.c ...

  5. RSA 加密及一些攻击方式

    本文章转载自个人博客seandictionary.top同步更新可能不及时 原理 随机生成两个素数,p , q 令n = p*q 由欧拉公式计算出φ(n) = (p-1)(q-1) 规定e,使得e满足 ...

  6. Asp.net mvc基础(四)其他类型的ActionResult

    ViewResult是ActionResult的子类 1.Redirect 返回值类型:RedirectResult 用法:return Redirect(""); //返回值类型 ...

  7. robotframework:运用JavaScript进行定位元素以及页面操作

    在ui自动化时,有些特殊情况需要用到js操作,在进行js操作前要先进行js元素定位.一.js元素定位 1.id定位 document.getElementById("id") 2. ...

  8. ubuntu nginx + php7.2 + mysql5.7环境搭建

    一.换源 备份原来的源 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 更换源 sudo gedit /etc/apt/sources ...

  9. mysql免密登录

    开启mysql免密登录, vi /etc/my.cnf [mysqld]下添加 skip-grant-tables , 保存后重启mysql服务:service mysqld restart

  10. windows快速开启【程序和功能】

    程序和功能一般常用的操作是对软件进行卸载. 方式一: 1. Win+R打开运行 2. 输入appwiz.cpl命令 方式二: 1.Win+X打开快捷开关 2. F进去应用和功能 3.点击右侧程序和功能 ...