uni-app 云对象中require node模块 本地云函数正常 云端云函数报错

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

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>

操作步骤

  1. HBuilder X -> 运行 -> 运行到浏览器 -> Edge
  2. 切换为连接云端函数
  3. 打开Edge访问 http://localhost:5173/#/
  4. 点击生成按钮
  5. 页面弹出"用户函数代码语法或逻辑异常"
  6. 浏览器控制台报错
  7. 云对象报错

预期结果

能通过云对象调用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)"
}

3 回复

依赖模块在package.json文件里吗?


在的,在package.json的dependencies里面

在 uni-app 中使用云对象并尝试 require Node.js 模块时,确实可能会遇到在本地云函数正常运行,但在云端云函数报错的情况。这通常是由于云端环境与本地环境之间的差异导致的,例如 Node.js 版本、模块依赖、权限问题等。

以下是一个简单的示例,展示如何在 uni-app 云对象中引入并使用 Node.js 模块,同时提供一些可能的解决方案来处理云端报错问题。

示例代码

假设我们想在 uni-app 云对象中使用 axios 模块进行 HTTP 请求。

  1. 本地安装模块

首先,确保在本地项目中安装了 axios 模块:

npm install axios --save
  1. 编写云函数

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
    };
  }
};
  1. 部署到云端

在部署到云端之前,确保你的 uni-app 项目配置正确,并且已经绑定了云开发环境。使用 HBuilderX 或命令行工具将云函数部署到云端。

解决云端报错问题

如果云端云函数报错,可以尝试以下步骤:

  • 检查 Node.js 版本:确保云端环境与本地环境使用的 Node.js 版本一致。
  • 检查模块依赖:确保所有依赖模块都已正确安装,并且没有版本冲突。
  • 检查网络请求:如果错误与 HTTP 请求相关,检查云端是否有网络访问权限。
  • 查看云端日志:通过 uni-app 云控制台查看云端函数的日志,获取更详细的错误信息。
  • 权限配置:确保云端函数有足够的权限执行所需操作,如访问数据库、文件系统或外部 API。

由于具体错误信息未提供,以上步骤和代码示例是基于通用情况的建议。在实际应用中,可能需要根据具体的错误信息进行调整和排查。

回到顶部