Node.js调用OpenAI API遇await语法错误,如何解决?
解决await语法错误并实现Express调用OpenAI API的Hello World
问题原因
你遇到的SyntaxError是因为CommonJS模块(用require导入的文件)的顶层作用域不能直接使用await,只有ES模块(通过package.json设置"type": "module"或使用.mjs后缀)才支持顶层await。OpenAI官方示例默认假设你使用ES模块环境,而你的代码是CommonJS格式,直接复制就会触发报错。
适配Express场景的解决方案
因为你需要在Express路由中调用OpenAI API,正确的做法是把API调用放到标记为async的路由处理函数里,这样就能合法使用await。修改后的完整代码如下:
const express = require('express') const app = express() const { Configuration, OpenAIApi } = require("openai"); const configuration = new Configuration({ apiKey: "你的API密钥" }); const openai = new OpenAIApi(configuration); // 将OpenAI调用逻辑放入async路由处理函数 app.get('/', async function (req, res) { try { const completion = await openai.createCompletion({ model: "text-davinci-002", prompt: "Hello world", }); const openAiResponse = completion.data.choices[0].text; res.send(`OpenAI响应:${openAiResponse}`); } catch (error) { // 捕获API调用失败的异常 res.status(500).send(`调用失败:${error.message}`); } }) app.listen(3000, () => { console.log('服务器运行在http://localhost:3000'); })
其他可选方案(使用顶层await)
如果你想沿用官方示例的顶层写法,需要将项目切换为ES模块:
- 在项目根目录的
package.json中添加"type": "module" - 将所有
require导入替换为import语法,示例:import express from 'express'; import { Configuration, OpenAIApi } from "openai";
官方示例无报错的原因
OpenAI官方示例是针对ES模块环境编写的,当项目配置为ES模块时,顶层await是合法语法。但Node.js项目默认是CommonJS格式,所以直接复制示例代码会触发语法错误。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

