POST请求配置异常:点击提交无响应,提示cannot GET /ask
问题排查与修复方案
核心错误点
- 变量名不匹配:初始化的OpenAI实例是
openai,但代码中调用时用了未定义的client,导致服务器报错无法响应请求。 - OpenAI API响应结构错误:新版API(v4)的响应无需通过
response.data访问,直接读取response对象中的属性即可。
修正后的server.js代码
require('dotenv').config(); const express = require('express'); const OpenAI = require("openai"); const cors = require ('cors') const path = require('path') // Initialization const openai = new OpenAI({ apiKey: "sk-proj-BLAHBLAHBLAHAPIKEY", }); const app = express(); const port = 3001; app.use(cors()); app.use(express.json()); app.use(express.static(path.join(__dirname, 'public'))); app.post('/ask', async (req, res) => { const { question } = req.body; console.log('Received question:', question); // Log the received question try { console.log('Sending request to OpenAI...'); // 修正:使用正确的实例名openai const response = await openai.chat.completions.create({ model: "gpt-3.5-turbo", messages: [{ role: "user", content: question }], }); // 修正:新版API直接访问response.choices,无需response.data console.log('OpenAI response:', response); // Log the full response object res.json({ answer: response.choices[0].message.content }); } catch (error) { console.error('Error communicating with OpenAI:', error); // Log the error res.status(500).json({ error: 'Failed to generate response from OpenAI API' }); } }); app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });
额外说明
- 浏览器提示
cannot GET /ask属于正常现象:因为/ask接口是POST方法,直接在浏览器地址栏发起GET请求必然会返回该错误,不影响按钮的POST请求功能。 - 按钮无响应的根本原因是服务器端代码报错,导致请求返回500错误,修正上述两个问题后,重启服务器即可正常获取AI回复。
内容的提问来源于stack exchange,提问作者Erik Roberts
相关产品推荐
相关产品推荐

