使用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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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