Node.js搭建OpenAI图像生成后端遇400错误,请求协助排查
排查OpenAI图像生成API返回400错误的问题
我用Node.js搭建了基于OpenAI API的图像生成后端,核心功能是根据前端传入的提示词生成图像,但持续收到OpenAI返回的400错误,功能无法正常运行。已在.env文件中配置OPENAI_API_KEY和MongoDB_URL,无法定位问题根源。
相关代码及错误信息
Node.js后端代码
import express from 'express'; import * as dotenv from 'dotenv'; import { Configuration, OpenAIApi } from 'openai'; dotenv.config(); const router=express.Router(); const configuration= new Configuration({ apiKey:process.env.OPENAI_API_KEY, }); const openai= new OpenAIApi(configuration); router.route('/').get((req,res)=>{ res.send('Hello everyone !!') }) router.route('/').post(async(req,res)=>{ try { // 来自前端的参数 const {prompt}=req.body; const aiResponse=await openai.createImage({ prompt, n:1, size:'1024x1024', response_format:'b64_json', }); const image=aiResponse.data.data[0].b64_json; res.status(200).json({photo:image}); } catch (error) { console.error(error); res.status(500).send(error?.response.data.error.message || 'Something went wrong..') } }) export default router;
React前端请求代码
const [formFill,setFormFill]=useState({ name:'', prompt:'', photo:'' }) const [imgGenerate,setImgGenerate]=useState(false); const imgCreate= async ()=>{ if (formFill.prompt) { try { setImgGenerate(true); const response = await fetch('http://localhost:5000/api/v1/dalleApi', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ prompt: formFill.prompt, }), }); const data = await response.json(); setFormFill({ ...formFill, photo: `data:image/jpeg;base64,${data.photo}` }); } catch (err) { alert(err); } finally { setImgGenerate(false); } } else { alert('Please provide a proper prompt !'); } }
错误响应信息
Request failed with status code 400 at createError (D:\Web dev Projects\ai_image_generation_app\backend\node_modules\axios\lib\core\createError.js:16:15) at settle (D:\Web dev Projects\ai_image_generation_app\backend\node_modules\axios\lib\core\settle.js:17:12) at IncomingMessage.handleStreamEnd (D:\Web dev Projects\ai_image_generation_app\backend\node_modules\axios\lib\adapters\http.js:322:11) at IncomingMessage.emit (node:events:525:35) at endReadableNT (node:internal/streams/readable:1359:12) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus], headers: { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json', 'User-Agent': 'OpenAI/NodeJS/3.3.0', Authorization: 'Bearer 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', 'Content-Length': 55 }, method: 'post', data: '{"n":1,"size":"1024x1024","response_format":"b64_json"}', url: 'https://api.openai.com/v1/images/generations' },
排查方向及解决方法
从错误日志的data字段能看到,发给OpenAI的请求缺少prompt参数,这是400错误的核心原因,按以下步骤排查:
- 确保Express解析JSON请求体:在你的主服务文件(如
server.js)中添加express.json()中间件,否则后端无法解析前端传来的JSON格式请求体,req.body.prompt会是undefined:app.use(express.json()); - 验证prompt参数是否正常接收:在后端POST接口中添加日志,确认是否获取到前端传来的prompt:
console.log('Received prompt:', prompt); - 检查API密钥权限:确认你的OpenAI API密钥有调用
images/generations接口的权限,账户是否有可用余额,无访问限制。可以用Postman直接调用OpenAI API测试密钥有效性。 - 验证prompt合规性:OpenAI会拒绝违反内容政策的prompt,若prompt包含违规内容也会返回400错误,先用简单合规的prompt(如"a cute cat sitting on a windowsill")测试。
- 更新OpenAI包版本:当前使用的
openai包为3.3.0版本,尝试更新到最新稳定版,避免版本兼容性问题:npm update openai
内容的提问来源于stack exchange,提问作者Aarush 01
相关产品推荐
相关产品推荐

