uni-app 导入mqttjs后发送给基座报错 Cannot read property 'language' of undefined

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 导入mqttjs后发送给基座报错 Cannot read property ‘language’ of undefined

产品分类:

uniapp/App

PC开发环境操作系统:

Windows

PC开发环境操作系统版本号:

win11

HBuilderX类型:

正式

HBuilderX版本号:

4.29

手机系统:

Android

手机系统版本号:

Android 14

手机厂商:

小米

手机机型:

redmi k70 ultra alsc

页面类型:

vue

vue版本:

vue3

打包方式:

云端

项目创建方式:

HBuilderX

示例代码:

<template>  
    <view class="content">  
        <image class="logo" src="/static/logo.png"></image>  
        <view class="text-area">  
            <text class="title">{{ title }}</text>  
        </view>  
    </view>  
</template>  

<script setup>  
import { ref } from 'vue';  
import mqtt from "mqtt";  
const title = ref('hello');  
</script>  

<style>  
.content {  
    display: flex;  
    flex-direction: column;  
    align-items: center;  
    justify-content: center;  
}  

.logo {  
    height: 200rpx;  
    width: 200rpx;  
    margin-top: 200rpx;  
    margin-left: auto;  
    margin-right: auto;  
    margin-bottom: 50rpx;  
}  

.text-area {  
    display: flex;  
    justify-content: center;  
}  

.title {  
    font-size: 36rpx;  
    color: #8f8f94;  
}  
</style>  

操作步骤:

只要发送道真机就会有这个错误

预期结果:

18:27:24.526 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: Cannot read property 'language' of undefined
at  (app-service.js:167:90)
at  (app-service.js:82:39)
at  (app-service.js:195:5)
at  (app-service.js:82:39)
at  (app-service.js:1157:5)
at  (app-service.js:82:39)
at  (app-service.js:1169:5)
at  (app-service.js:82:39)
at  (app-service.js:11707:5)
at  (app-service.js:83:33)

实际结果:

18:27:24.526 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: Cannot read property 'language' of undefined
at  (app-service.js:167:90)
at  (app-service.js:82:39)
at  (app-service.js:195:5)
at  (app-service.js:82:39)
at  (app-service.js:1157:5)
at  (app-service.js:82:39)
at  (app-service.js:1169:5)
at  (app-service.js:82:39)
at  (app-service.js:11707:5)
at  (app-service.js:83:33)

bug描述:

我新建项目尝试引入最新版本的mqttjs,在Android系统下,无论是默认基座,还是自定义基座都会出现相同的问题,只是单纯引入了mqttjs,没写其他代码


4 回复

版本太高了,用4.3.8试试


Buffer is not defined

回复 2***@qq.com: 有没有处理的方式呢

在处理 uni-app 中使用 mqttjs 库时遇到 Cannot read property 'language' of undefined 的错误,通常是由于环境或依赖不兼容导致的。在 uni-app 中,尤其是当代码需要在不同的基座(如 H5、App、小程序等)上运行时,需要特别注意库的兼容性和执行环境。

由于直接给出代码案例可能无法完全解决环境问题,但我可以提供一个基本的 mqttjs 使用示例,并给出一些可能的解决方向。

MQTT.js 基本使用示例

首先,确保你已经在项目中正确安装了 mqtt 库:

npm install mqtt --save

然后,在 uni-app 的一个页面中尝试使用 MQTT 连接:

<template>
  <view>
    <text>{{ message }}</text>
  </view>
</template>

<script>
import Paho from 'paho-mqtt';

export default {
  data() {
    return {
      message: 'Connecting...',
      client: null,
    };
  },
  mounted() {
    this.connectMQTT();
  },
  methods: {
    connectMQTT() {
      const host = 'mqtt.example.com';
      const port = 443;
      const clientId = `client-${Math.random().toString(16).substr(2, 8)}`;
      
      this.client = new Paho.Client(host, port, clientId);

      const options = {
        onSuccess: this.onConnect,
        onFailure: this.onFailure,
        userName: 'your-username',
        password: 'your-password',
        useSSL: true,
      };

      this.client.connect(options);
    },
    onConnect() {
      this.message = 'Connected';
      // Subscribe or publish messages here
    },
    onFailure(message) {
      this.message = `Connection failed: ${message}`;
    },
  },
};
</script>

解决方向

  1. 环境兼容性:检查 mqttjs 库是否支持当前的 uni-app 基座环境。某些库可能不支持小程序或 App 环境。

  2. Webpack 配置:如果你在使用 App 端,可能需要调整 Webpack 配置来正确打包 mqttjs

  3. 条件编译:使用 uni-app 的条件编译功能,为不同基座提供不同的实现。

  4. 依赖注入:确保所有依赖都已正确安装,并且没有版本冲突。

  5. 错误处理:增强错误处理逻辑,打印更多错误信息,帮助定位问题。

由于错误指向 language 属性,这可能与某些内部依赖或环境配置有关。如果上述方法未能解决问题,建议检查 mqttjs 的依赖链,看是否有其他库或框架影响了其正常运行。

回到顶部