uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错
uni-app的uniCloud安装了JWT插件后,连接本地云函数功能正常,连接云端云函数报错
操作步骤:
- 安装jwt插件,封装工具类在common文件夹中(引入jwt插件)
- 创建云函数,使用common新建的工具类
- 小程序端调用该云函数,报错 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
在处理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>
问题排查与修正
-
检查云函数配置:
- 确保云端云函数配置正确,包括依赖项是否正确安装(如JWT库)。
- 检查云函数的
project.config.json
是否包含正确的云函数路径。
-
环境变量:
- 本地和云端的环境变量可能不同,确保JWT的密钥等配置在云端也正确设置。
-
网络请求:
- 检查是否有网络请求限制或CORS(跨源资源共享)问题影响云端调用。
-
日志与错误信息:
- 查看uniCloud控制台中的云函数调用日志,获取详细的错误信息。
-
权限设置:
- 确保云函数的权限设置允许客户端调用。
通过上述步骤和代码示例,你应该能够定位并解决uni-app中uniCloud连接云端云函数时遇到的问题。如果问题依旧存在,建议详细检查错误信息并参考uni-app和uniCloud的官方文档。