You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js集成OpenAI API遇401错误及Promise未处理问题求助

问题分析与修复方案

1. 401错误原因及解决

401表示身份认证失败,核心问题出在OpenAI API密钥配置上:

  • 检查环境变量OPENAI_API_KEY:确认变量名无拼写错误,密钥值是从OpenAI后台复制的完整字符串(无多余空格、换行)。
  • 验证密钥有效性:登录OpenAI平台确认密钥处于活跃状态,未被禁用或过期。
  • 确保环境变量加载:如果使用dotenv,需在文件开头添加require('dotenv').config(),保证环境变量能被正确读取。

2. 程序崩溃原因:未处理Promise拒绝

你的代码中调用openai.createCompletion时未做错误捕获,一旦API调用失败,会抛出未处理的Promise拒绝,直接导致程序崩溃。需将所有异步操作(OpenAI请求、数据库保存)放入统一的try/catch块中处理。

3. 修复后的完整代码

const { Configuration, OpenAIApi } = require("openai");
require('dotenv').config(); // 确保加载环境变量

// 创建用户数据接口
const createUserData = async (req, res) => {
    try {
        const { id, scores, transcript } = req.body;
        const user_id = req.user._id;
        console.log(user_id);

        // 初始化OpenAI配置
        const configuration = new Configuration({
            apiKey: process.env.OPENAI_API_KEY,
        });
        const openai = new OpenAIApi(configuration);

        // 调用OpenAI API获取反馈
        const openaiResponse = await openai.createCompletion({
            model: "text-davinci-002",
            prompt: `Provide personal feedback for me and give me tips: ${transcript}`,
            temperature: 0.7,
            max_tokens: 256,
            top_p: 1,
            frequency_penalty: 0,
            presence_penalty: 0,
        });
        
        // 打印API返回的实际文本内容
        console.log(openaiResponse.data.choices[0].text.trim());

        // 创建用户数据并保存到数据库
        const newUserData = new UserData({
            id: id,
            scores: scores,
            transcript: transcript,
            user_id: user_id
        });
        
        await newUserData.save();
        console.log('POST:', newUserData);
        return res.status(201).json({ user_data: newUserData });

    } catch (error) {
        // 统一捕获并处理所有错误
        console.error('Error:', error.message);
        // 根据错误类型返回对应状态码和提示
        if (error.response?.status === 401) {
            return res.status(401).json({ error: "OpenAI API密钥无效或未配置" });
        }
        return res.status(500).json({ error: error.message });
    }
};

额外优化建议

  • 输入校验:处理请求前先检查transcript是否存在,避免空字符串调用OpenAI API。
  • 模型升级:text-davinci-002为旧模型,建议替换为gpt-3.5-turbo-instruct,性能更优。
  • 错误细分:在catch块中区分OpenAI错误、数据库错误,返回更精准的前端提示。

内容的提问来源于stack exchange,提问作者Soccerball123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:25:22