Nuxt3集成OpenAI API:本地正常,部署Vercel后报错
解决Nuxt 3部署Vercel后调用OpenAI API返回500错误的方案
1. 完善服务端错误捕获与日志输出
当前服务端API代码未做错误处理,一旦请求失败会直接抛出未捕获异常导致500。修改server/api/generate.js,添加错误捕获并输出日志,方便定位问题:
import { Configuration, OpenAIApi } from "openai"; export default defineEventHandler(async (event) => { try { const body = await readBody(event) const config = useRuntimeConfig() // 先校验API密钥是否存在 if (!config.secret) { throw new Error('OpenAI API密钥未配置') } const configuration = new Configuration({ apiKey: config.secret, }); const openai = new OpenAIApi(configuration); const completion = await openai.createCompletion({ model: "text-davinci-003", prompt: body.sentence, temperature: 0.6, max_tokens: 420, }); return completion.data.choices[0].text; } catch (error) { // 输出错误到Vercel函数日志 console.error('请求处理失败:', error); // 返回明确的错误信息给前端 throw createError({ statusCode: error.response?.status || 500, statusMessage: error.response?.data?.error?.message || error.message || '服务器内部错误' }) } })
2. 强制Vercel重新部署并清除缓存
添加环境变量后,旧部署的缓存可能未加载新变量:
- 进入Vercel项目控制台
- 点击顶部的"重新部署"按钮
- 在弹出窗口中勾选"清除构建缓存",再执行部署
3. 校验环境变量配置
- 确认Vercel中设置的环境变量名称为OPENAI_API_KEY,与
nuxt.config.ts中process.env.OPENAI_API_KEY完全一致(大小写敏感) - 检查变量值是否正确,无多余空格或字符
4. 尝试切换Vercel部署预设
当前使用vercel-edge预设,Edge函数存在部分限制,可尝试切换为普通Serverless预设:
修改nuxt.config.ts:
export default defineNuxtConfig({ runtimeConfig: { secret: process.env.OPENAI_API_KEY, }, nitro: { preset: 'vercel', // 替换为vercel预设 }, });
5. 查看Vercel函数日志定位具体问题
部署完成后,在Vercel控制台进入"函数"页面,找到/api/generate函数,查看执行日志:
- 日志会显示具体错误原因,比如API密钥缺失、OpenAI调用超限、网络超时等
- 根据日志信息针对性解决问题
内容的提问来源于stack exchange,提问作者Awesom-o
相关产品推荐
相关产品推荐

