Express项目中调用OpenAI API的代码位置与触发方式问询
问题解决方法
1. 解决SyntaxError: Cannot use import statement outside a module错误
你的Express项目默认采用CommonJS模块规范,无法直接使用ES6的import语法,有两种处理方案:
方案一:改用CommonJS的require语法(推荐,无需修改项目配置)
将OpenAI的初始化代码改为以下形式,直接放入api.js路由文件:
const { Configuration, OpenAIApi } = require("openai"); const configuration = new Configuration({ organization: "org-sdfds34dsf", apiKey: process.env.OPENAI_API_KEY, }); const openai = new OpenAIApi(configuration);
方案二:将项目转为ES模块(需修改配置)
- 在项目根目录的
package.json中添加"type": "module"字段 - 之后可正常使用
import语法,但需注意将项目中所有模块引用统一改为ES模块形式(如把require替换为import)
2. 在路由内触发OpenAI API调用
在POST端点的处理函数中,用async/await调用OpenAI接口,以下是完整示例(以聊天接口为例,可根据需求替换为listEngines等其他接口):
// api.js 完整代码示例 const express = require('express'); const router = express.Router(); const { Configuration, OpenAIApi } = require("openai"); // 加载环境变量(需先安装dotenv:npm install dotenv) require('dotenv').config(); // 初始化OpenAI客户端 const configuration = new Configuration({ organization: "org-sdfds34dsf", apiKey: process.env.OPENAI_API_KEY, }); const openai = new OpenAIApi(configuration); // 处理前端POST请求的端点 router.post('/', async (req, res) => { try { // 获取前端表单传入的prompt const userPrompt = req.body.prompt; // 调用OpenAI聊天接口 const response = await openai.createChatCompletion({ model: "gpt-3.5-turbo", messages: [{ role: "user", content: userPrompt }], }); // 将结果返回给前端 res.json({ msg: "请求成功", content: response.data.choices[0].message.content }); } catch (error) { // 错误处理 res.status(500).json({ msg: "请求失败", error: error.message }); } }); module.exports = router;
注意事项
- 确保通过
dotenv管理环境变量,避免直接硬编码API密钥 - OpenAI API调用为异步操作,路由处理函数必须标记为
async,并使用await等待响应 - 可根据需求替换OpenAI的API接口,具体参数参考官方文档要求
内容的提问来源于stack exchange,提问作者Ron I
相关产品推荐
相关产品推荐

