uni-app 云对象中require node模块 本地云函数正常 云端云函数报错
uni-app 云对象中require node模块 本地云函数正常 云端云函数报错
产品分类
uniCloud/支付宝小程序云
示例代码
{
"name": "bc-ai",
"dependencies": {},
"extensions": {
"uni-cloud-jql": {}
}
}
// index.obj.js,云对象代码,调用Moonshot大模型
const OpenAI = require('openai');
module.exports = {
_before: function() { // 通用预处理器
this.client = new OpenAI({
apiKey: 'xxx',
baseURL: 'https://api.moonshot.cn/v1'
});
},
async format(text) {
const completion = await this.client.chat.completions.create({
model: "moonshot-v1-8k",
messages: [{
role: 'system',
content: '你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。'
},
{
role: 'user',
content: text
}
],
temperature: 0.3,
response_format: {
type: "json_object"
}
})
const res = completion.choices[0].message.content;
return JSON.parse(res);
}
}
<template>
<button type="default" :loading="processing" size="default" @click="generate()">生成</button>
</template>
<script setup>
const bcai = uniCloud.importObject('bc-ai');
const generate = async () => {
const data = await bcai.format('生成零售领域测试数据,限制:1. 20条,2. 以json格式返回');
console.log(data);
}
</script>
操作步骤
- HBuilder X -> 运行 -> 运行到浏览器 -> Edge
- 切换为连接云端函数
- 打开Edge访问 http://localhost:5173/#/
- 点击生成按钮
- 页面弹出"用户函数代码语法或逻辑异常"
- 浏览器控制台报错
- 云对象报错
预期结果
能通过云对象调用node openai库,来调用Moonshot大模型
实际结果
云对象报错,提示Cannot find module ‘openai’
bug描述
云对象中引入第三方node模块(openai),引入方式require(‘openai’),本地云函数正常,云端云函数报错。
云端错误日志如下:
Error: Cannot find module 'openai'
Require stack:
- /var/task/code/index.obj.js
- /var/task/code/__index.js
- /var/task/code/index.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
at Module._load (node:internal/modules/cjs/loader:922:27)
at Module.require (node:internal/modules/cjs/loader:1143:19)
at require (node:internal/modules/cjs/helpers:119:18)
at Object.<anonymous> (/var/task/code/index.obj.js:1:78)
at Module._compile (node:internal/modules/cjs/loader:1256:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
at Module.load (node:internal/modules/cjs/loader:1119:32)
at Module._load (node:internal/modules/cjs/loader:960:12)
at Module.require (node:internal/modules/cjs/loader:1143:19)
浏览器报错信息如下:
{
"errDetail": User Function Code Logic Error, Please Check Function Code: {"code":"400","message":"error: Cannot find module 'openai'\nRequire stack:\n- /var/task/code/index.obj.js\n- /var/task/code/__index.js\n- /var/task/code/index.js. stack: Error: Cannot find module 'openai'\nRequire stack:\n- /var/task/code/index.obj.js\n- /var/task/code/__index.js\n- /var/task/code/index.js\n at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)\n at Module._load (node:internal/modules/cjs/loader:922:27)\n at Module.require (node:internal/modules/cjs/loader:1143:19)\n at require (node:internal/modules/cjs/helpers:119:18)\n at Object.<anonymous> (/var/task/code/index.obj.js:1:78)\n at Module._compile (node:internal/modules/cjs/loader:1256:14)\n at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)\n at Module.load (node:internal/modules/cjs/loader:1119:32)\n at Module._load (node:internal/modules/cjs/loader:960:12)\n at Module.require (node:internal/modules/cjs/loader:1143:19)",
"errCode": "40000",
"errMsg": "用户函数代码语法或逻辑异常",
"errOrigin": "{\"code\":\"400\",\"message\":\"error: Cannot find module 'openai'\nRequire stack:\n- /var/task/code/index.obj.js\n- /var/task/code/__index.js\n- /var/task/code/index.js. stack: Error: Cannot find module 'openai'\nRequire stack:\n- /var/task/code/index.obj.js\n- /var/task/code/__index.js\n- /var/task/code/index.js\n at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)\n at Module._load (node:internal/modules/cjs/loader:922:27)\n at Module.require (node:internal/modules/cjs/loader:1143:19)\n at require (node:internal/modules/cjs/helpers:119:18)\n at Object.<anonymous> (/var/task/code/index.obj.js:1:78)\n at Module._compile (node:internal/modules/cjs/loader:1256:14)\n at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)\n at Module.load (node:internal/modules/cjs/loader:1119:32)\n at Module._load (node:internal/modules/cjs/loader:960:12)\n at Module.require (node:internal/modules/cjs/loader:1143:19)"
}
依赖模块在package.json文件里吗?
在的,在package.json的dependencies里面
在 uni-app 中使用云对象并尝试 require
Node.js 模块时,确实可能会遇到在本地云函数正常运行,但在云端云函数报错的情况。这通常是由于云端环境与本地环境之间的差异导致的,例如 Node.js 版本、模块依赖、权限问题等。
以下是一个简单的示例,展示如何在 uni-app 云对象中引入并使用 Node.js 模块,同时提供一些可能的解决方案来处理云端报错问题。
示例代码
假设我们想在 uni-app 云对象中使用 axios
模块进行 HTTP 请求。
- 本地安装模块
首先,确保在本地项目中安装了 axios
模块:
npm install axios --save
- 编写云函数
在 cloudfunctions
目录下创建一个云函数,如 myCloudFunction
,并在其中引入 axios
:
// cloudfunctions/myCloudFunction/index.js
const cloud = require('wx-server-sdk');
const axios = require('axios');
cloud.init();
exports.main = async (event, context) => {
try {
const response = await axios.get('https://api.example.com/data');
return {
success: true,
data: response.data
};
} catch (error) {
return {
success: false,
error: error.message
};
}
};
- 部署到云端
在部署到云端之前,确保你的 uni-app 项目配置正确,并且已经绑定了云开发环境。使用 HBuilderX 或命令行工具将云函数部署到云端。
解决云端报错问题
如果云端云函数报错,可以尝试以下步骤:
- 检查 Node.js 版本:确保云端环境与本地环境使用的 Node.js 版本一致。
- 检查模块依赖:确保所有依赖模块都已正确安装,并且没有版本冲突。
- 检查网络请求:如果错误与 HTTP 请求相关,检查云端是否有网络访问权限。
- 查看云端日志:通过 uni-app 云控制台查看云端函数的日志,获取更详细的错误信息。
- 权限配置:确保云端函数有足够的权限执行所需操作,如访问数据库、文件系统或外部 API。
由于具体错误信息未提供,以上步骤和代码示例是基于通用情况的建议。在实际应用中,可能需要根据具体的错误信息进行调整和排查。