使用Node.js构建OpenAI图像生成的后端时遇到400错误码

我第一次尝试使用Node.js构建后端。我需要实现以下功能:根据提示生成图像 -> 获取图像并上传到supabase存储 -> 返回上传图像的公共URL。我一直收到一个错误提示,暗示是来自OpenAI的认证错误(400),但我知道API密钥是有效的,甚至为了确保无误,我还生成了一个新的密钥。当我直接从前端向API发送请求时,生成功能是正常工作的,但这样会暴露API密钥。我不确定哪里出了问题。

Node.js代码如下:

const express = require('express');const axios = require('axios');const bodyParser = require('body-parser');const fs = require('fs');const FormData = require('form-data');const { createClient } = require('@supabase/supabase-js');const app = express();const port = 3000;const apiKey = '<HIDDEN>';const supabaseUrl = '<HIDDEN>';const supabaseKey = '<HIDDEN>';const supabaseBucket = 'public/posts';const config = {  headers: {    'Authorization': 'Bearer ' + apiKey,    'Content-Type': 'application/json'  }};const supabase = createClient(supabaseUrl, supabaseKey);app.use(bodyParser.json());// 允许任何访问控制来源app.use(function(req, res, next) {  res.header('Access-Control-Allow-Origin', '*');  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');  next();});app.post('/generate-image', async (req, res) => {  try {    const { text } = req.body;    // 构建对Dall-e API的请求    const response = await axios.post(      'https://api.openai.com/v1/images/generations',      {        prompt: text,        size: "256x256",        api_key: apiKey,        response_format: "b64_json"      },      config    );    console.log("图像已创建...");    // 获取生成的图像作为base64编码的字符串    console.log("正在获取图像...");    const imageBase64 = response.data.data[0].value;    // 上传图像到Supabase存储    const { data: uploadData } = await supabase.storage      .from(supabaseBucket)      .upload(Date.now() + '.png', imageBase64, {        cacheControl: '3600',        upsert: false,        contentType: 'image/png',      });    // 返回上传文件的公共URL    res.json({      imageUrl: `${supabaseUrl}/public/${supabaseBucket}/${uploadData.Key}`,    });  } catch (error) {    res.status(500).json({ message: `生成图像失败 ${error}` });  }});app.listen(port, () => {  console.log(`服务器正在监听端口 ${port}`);});

来自React Native应用的请求如下:

const generateImage = async (text: any) => {  try {    const response = await fetch(      "https://endpoint.com/generate-image",      {        method: "POST",        headers: {          "Content-Type": "application/json",        },        body: JSON.stringify({ text }),      }    );    const data = await response.json();    console.log(data.imageUrl);    return data.imageUrl;  } catch (error) {    console.error(error);    return null;  }};

响应如下:

{    "message": "生成图像失败 AxiosError: 请求失败,状态码为400"}

回答:

您在请求体中发送了api_key: apiKey,而OpenAI API并不期望接收这个参数。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注