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

React集成OpenAI API出现404错误,请求问题排查

问题描述

我正在按照教程将ChatGPT集成到React+Node.js应用中,完成所有步骤后,在输入框提交prompt时出现如下错误:
错误截图

以下是我的代码文件供参考:

ChatGpt.js文件

import React, { useState } from 'react';
import axios from 'axios';

const ChatGPT = () => {
  const [input, setInput] = useState('');
  const [response, setResponse] = useState('');

  const handleSubmit = async (e) => {
    e.preventDefault();

    try {
      const result = await axios.post('', { prompt: input });
      setResponse(result.data.text);
    } catch (error) {
      console.error(error);
      setResponse('An error occurred while processing your request.');
    }
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <label htmlFor="input">Input:</label>
        <input
          type="text"
          id="input"
          value={input}
          onChange={(e) => setInput(e.target.value)}
        />
        <button type="submit">Submit</button>
      </form>
      <div>
        <h3>Response:</h3>
        <p>{response}</p>
      </div>
    </div>
  );
};

export default ChatGPT;

server.js文件

const express = require('express');
const app = express();
const port = 3000;
const openai = require('openai');
openai.apiKey = "My-API-Key";

app.get('', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
});

app.use(express.json());

app.post('', async (req, res) => {
  const prompt = req.body.prompt;

  try {
    const response = await openai.Completion.create({
      engine: 'text-davinci-002',
      prompt: prompt,
      max_tokens: 50,
      n: 1,
      stop: null,
      temperature: 0.5,
    });

    res.json({ text: response.choices[0].text });
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: 'An error occurred while processing your request.' });
  }
});

我不确定是什么原因导致了这个错误。


问题排查与解决

1. 请求目标地址错误

React代码中axios.post('', { prompt: input })的URL为空,会默认请求当前前端页面的URL,而非Node后端接口。需修改为后端服务的完整地址:

const result = await axios.post('http://localhost:3000', { prompt: input });

2. 中间件加载顺序错误

Node代码中app.use(express.json())放在了app.listen()之后,导致JSON请求体解析中间件未生效,后端无法获取req.body.prompt。需调整顺序,将中间件挂载放在路由定义前:

const express = require('express');
const app = express();
const port = 3000;
const openai = require('openai');
openai.apiKey = "My-API-Key";

// 先挂载JSON解析中间件
app.use(express.json());

app.get('', (req, res) => {
  res.send('Hello World!');
});

app.post('', async (req, res) => {
  const prompt = req.body.prompt;

  try {
    const response = await openai.Completion.create({
      engine: 'text-davinci-002',
      prompt: prompt,
      max_tokens: 50,
      n: 1,
      stop: null,
      temperature: 0.5,
    });

    res.json({ text: response.choices[0].text });
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: 'An error occurred while processing your request.' });
  }
});

// 最后启动服务
app.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
});

3. 跨域问题(可能触发)

如果前端与后端运行在不同端口,需处理跨域。在Node端安装cors包:

npm install cors

然后在server.js中添加:

const cors = require('cors');
app.use(cors());

将其放在app.use(express.json())之后即可。

4. OpenAI API兼容问题

当前代码使用的旧版SDK及text-davinci-002模型已被弃用,建议升级到新版SDK并使用兼容模型:

npm install openai@latest

修改server.js中的OpenAI初始化与调用逻辑:

const { OpenAI } = require('openai');
const openai = new OpenAI({
  apiKey: "My-API-Key",
});

// ...

const response = await openai.completions.create({
  model: 'gpt-3.5-turbo-instruct',
  prompt: prompt,
  max_tokens: 50,
  n: 1,
  stop: null,
  temperature: 0.5,
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:46:03