首页 > 其他分享 >uniapp中使用mqtt.js的踩坑记录

uniapp中使用mqtt.js的踩坑记录

时间:2024-05-23 10:09:53浏览次数:16  
标签:uniapp console log js mqtt client const

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

一、安装

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

npm install [email protected]

二、引入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,console,log,js,mqtt,client,const
From: https://www.cnblogs.com/bokemoqi/p/18207721

相关文章

  • uniapp 闪屏页被拉伸解决方案 9图制作
    问题当闪屏页是一张图的时候,针对不同分辨率,容易被拉伸解决9图制作(必须是纯色背景)首先拿一张png图用安卓studio打开,就生产了一张9图然后进行9图制作右侧画边,底部画边,然后左边和顶部,利用画边,把可以拉伸的描出来在uniapp里面设置附送大佬的视频https://www.bilibil......
  • 如何全程使用docker部署jeecg平台,无需安装开发环境(主要是如何使用Docker来进行Maven打
    在部署jeecg平台时,文档中即使通过docker部署,也需要安装开发环境编译一部分内容,本文记录使用docker替代安装环境的过程。使用docker的目的是在平台选型的过程中,不希望麻烦的安装环境,同时如果选型不满意,无需卸载环境就能恢复一个干净的系统。部署环境:UbuntuServer20.04docker,......
  • js 创建和触发事件 和 自定义事件
    1、创建自定义事件Eventconstevent=newEvent("build");//监听该事件。elem.addEventListener("build",(e)=>{/*…*/},false,);//分派该事件。elem.dispatchEvent(event);2、创建自定义事件&添加自定义数据——customevent事件挂在到win......
  • JS历理 点击图片在弹出层显示大图
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=1"><title>后台首页-ICbA后台模板-普通版演示</title><m......
  • JS历理 Markdown在线编辑器editor
    官网下载下载地址:http://editor.md.ipandao.comJS引入新建文件夹md,将下载好的文件引入过来,新建方法视图文件<!DOCTYPEhtml><html><head> <metacharset="utf-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <ti......
  • uniapp_07_文本截取和canvas
    uniapp_07_文本截取和canvasuniapp的canvas文本截取获取图片颜色renderjs参考uniapp的canvasuniappcancas组件和api请看uniapp的官方文档,咕就不在这里写了,哎早知道当年就好好读书了,现在写个随笔都写不好,标点符号都不会用,果然没救了canvas组件和canvasApi与html......
  • Golang初学:vs code, launch.json, Run
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linuxvscode1.89.1--- 序章在vscode开发go程序,之前总是在终端(terminal)输入命令(gorun.)来执行。不过,这不是最高效的方式。通过添加并配置launch.json可以更方便地程序仅运行(Ctrl+F5......
  • thinkphp5遇到必须使用Db::raw方法而无法使用json格式传递Db对象
    今天使用Thinkphp5做异步任务传递where参数时遇到一个问题:有一段如下代码:$where['jst.supplier']=['exp',Db::raw('>0orjst.is_supplier=1')];在使用swoole做异步任务时需要把where参数传递给异步任务处理,因为无法传递数组和对象只能传递字符串,所以需要把where数组转换......
  • uniapp 页面无法后退
    页面C后退的时候报错,且无法后退因为页面A跳转到页面B的时候,传参里面有值为null的对象。从页面B再跳转到其他页面比如页面C,该页面就无法后退,并报上面的错误//页面A跳转到页面Bthis.$u.route({url:'pages/pageB',type:'navigateTo',......
  • 使用-Danfo-js-构建数据驱动应用-全-
    使用Danfo.js构建数据驱动应用(全)原文:zh.annas-archive.org/md5/074CFA285BE35C0386726A8DBACE1A4F译者:飞龙协议:CCBY-NC-SA4.0前言大多数数据分析师使用Python和pandas进行数据处理和操作,这得益于这些库提供的便利性和性能。然而,JavaScript开发人员一直希望浏览器......