uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错

uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错

操作步骤:

  1. 安装jwt插件,封装工具类在common文件夹中(引入jwt插件)
  2. 创建云函数,使用common新建的工具类
  3. 小程序端调用该云函数,报错 MODULE_NOT_FOUND:Cannot find module ‘jsonwebtoken’

预期结果:

程序正常执行

实际结果:

MODULE_NOT_FOUND:Cannot find module ‘jsonwebtoken’

bug描述:

问题描述:uniCloud安装了JWT插件,连接本地云函数功能正常,连接云端云函数报报错,报错内容 MODULE_NOT_FOUND:Cannot find module ‘jsonwebtoken’, 前置条件:在unicloud中的common中写了公共工具类,使用到了jsonwebtoken插件,连接本地云函数功能可以正常使用,上传部署了云函数,连接云端函数一直报错,尝试了各种方法无法解决该问题,使用最新版本的Hbuilder X开发工具(正式版)

调用云函数日志信息:

请求入参: {
    "args": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIyMDI0MDkyMTAyMDg1NDgiLCJpYXQiOjE3MjY4NTU3MzQsImV4cCI6MTcyOTQ0NzczNH0.MnLpWt094vuB6lWiARE0lcir2k7XloKA8BdToodxmgQ",
        "clientInfo": {
            "PLATFORM": "mp-toutiao",
            "OS": "ios",
            "APPID": "UNI57C0E58",
            "DEVICEID": "17252808000711306228",
            "scene": "990001",
            "deviceId": "17252808000711306228",
            "appId": "UNI57C0E58",
            "appName": "image_user",
            "appVersion": "1.0.0",
            "appVersionCode": "100",
            "appLanguage": "zh-Hans",
            "uniRuntimeVersion": "4.29",
            "uniPlatform": "mp-toutiao",
            "deviceBrand": "iphone",
            "deviceModel": "iPhone 15 Pro Max",
            "deviceType": "phone",
            "osName": "ios",
            "osVersion": "15",
            "hostVersion": "6.6.3",
            "hostName": "devtools",
            "locale": "zh-Hans",
            "LOCALE": "zh-Hans"
        }
    },
    "requestId": "ac1cc3161728488419364147803"
}
[select-collection-register/ac1cc3161728488419364147803/18ms/ERROR] Cannot find module 'jsonwebtoken'
Require stack:
- /tmp/function/@common_modules/jwt-common/index.js  
- /tmp/function/__index.js  
- /tmp/function/index.js  
- /code/index.js  
- /var/fc/runtime/nodejs16_alinode/prepare_code.js  
- /var/fc/runtime/nodejs16_alinode/invoke.js  
- /var/fc/runtime/nodejs16_alinode/bootstrap.js
Error: Cannot find module 'jsonwebtoken'
Require stack:
- /tmp/function/@common_modules/jwt-common/index.js  
- /tmp/function/__index.js  
- /tmp/function/index.js  
- /code/index.js  
- /var/fc/runtime/nodejs16_alinode/prepare_code.js  
- /var/fc/runtime/nodejs16_alinode/invoke.js  
- /var/fc/runtime/nodejs16_alinode/bootstrap.js
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
at Function.Module._load (node:internal/modules/cjs/loader:778:27)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/tmp/function/@common_modules/jwt-common/index.js:19:19)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
请求响应状态: fail

更多关于uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

package.json 文件里添加 jsonwebtoken 依赖了吗?

更多关于uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在处理uni-app的uniCloud与JWT插件集成时遇到本地云函数工作正常但云端云函数报错的问题,通常可能是由配置差异、环境变量不一致或网络请求处理不当导致的。以下是一个基于uni-app和uniCloud的示例代码,以及可能的问题排查和修正方法。

示例代码

1. 云函数配置(cloudfunctions/login/index.js)

const cloud = require('wx-server-sdk');
const jwt = require('jsonwebtoken');

cloud.init();

exports.main = async (event, context) => {
  const { username, password } = event;

  // 模拟验证用户
  if (username === 'test' && password === '123456') {
    const payload = { username };
    const token = jwt.sign(payload, 'your_secret_key', { expiresIn: '1h' });
    return {
      success: true,
      token
    };
  } else {
    return {
      success: false,
      message: 'Invalid credentials'
    };
  }
};

2. 客户端调用云函数(pages/login/login.vue)

<template>
  <view>
    <!-- 登录表单 -->
  </view>
</template>

<script>
export default {
  methods: {
    async login() {
      try {
        const res = await uniCloud.callFunction({
          name: 'login',
          data: {
            username: 'test',
            password: '123456'
          }
        });
        if (res.result.success) {
          uni.setStorageSync('token', res.result.token);
          uni.showToast({ title: 'Login successful' });
        } else {
          uni.showToast({ title: res.result.message, icon: 'none' });
        }
      } catch (error) {
        console.error('Error calling cloud function:', error);
        uni.showToast({ title: 'Error logging in', icon: 'none' });
      }
    }
  }
}
</script>

问题排查与修正

  1. 检查云函数配置

    • 确保云端云函数配置正确,包括依赖项是否正确安装(如JWT库)。
    • 检查云函数的project.config.json是否包含正确的云函数路径。
  2. 环境变量

    • 本地和云端的环境变量可能不同,确保JWT的密钥等配置在云端也正确设置。
  3. 网络请求

    • 检查是否有网络请求限制或CORS(跨源资源共享)问题影响云端调用。
  4. 日志与错误信息

    • 查看uniCloud控制台中的云函数调用日志,获取详细的错误信息。
  5. 权限设置

    • 确保云函数的权限设置允许客户端调用。

通过上述步骤和代码示例,你应该能够定位并解决uni-app中uniCloud连接云端云函数时遇到的问题。如果问题依旧存在,建议详细检查错误信息并参考uni-app和uniCloud的官方文档。

回到顶部