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

Express服务器代理第三方API的两类问题求助

解决方案:Express 转发请求至第三方 API 并回传结果

问题分析

你的代码存在两个核心问题:

  • 硬编码了第三方 API 路径,没有根据前端请求的动态路径拼接目标地址
  • 未处理 axios 请求的响应/错误,也没有将第三方的返回结果回传给前端,同时请求体的传递逻辑不够完善

修复后的完整代码

const express = require('express');
const cors = require('cors');
const path = require('path');
const axios = require("axios");

const app = express();
const THIRD_PARTY_BASE_URL = 'https://www.blabla.com';

// 启用 CORS
app.use(cors());
// 处理请求体(express 4.16+ 内置,无需单独安装 body-parser)
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 静态文件服务
app.use(express.static('public'));

// 处理所有 POST 请求的转发
app.post('*', async (req, res) => {
  try {
    // 动态拼接目标 API 地址:前端请求路径 + 第三方基础地址
    const targetUrl = `${THIRD_PARTY_BASE_URL}${req.path}`;
    
    // 合并请求头:保留前端传入的头,添加自定义授权头
    const requestHeaders = {
      ...req.headers,
      "Authorization": "Bearer Token-001",
      // 移除可能导致跨域问题的头,避免第三方 API 报错
      "host": new URL(THIRD_PARTY_BASE_URL).host,
      "origin": THIRD_PARTY_BASE_URL
    };

    // 发送请求至第三方 API
    const response = await axios({
      method: 'post',
      url: targetUrl,
      data: req.body,
      headers: requestHeaders,
      responseType: 'json'
    });

    // 将第三方 API 的结果回传给前端
    res.status(response.status).set(response.headers).send(response.data);
  } catch (error) {
    // 处理请求失败的情况,将错误信息返回给前端
    const errorStatus = error.response?.status || 500;
    const errorData = error.response?.data || { message: '请求第三方 API 失败' };
    res.status(errorStatus).send(errorData);
  }
});

const PORT = 5050;
app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));

关键修复点说明

  • 动态路径拼接:通过 req.path 获取前端请求的路径,和第三方 API 基础地址拼接成完整的目标 URL,解决固定路径的问题
  • 请求体传递:使用 express 内置的 express.json() 和 express.urlencoded() 中间件正确解析前端请求体,直接将 req.body 传给 axios,确保请求体完整传递
  • 请求头处理:合并前端传入的请求头和自定义的授权头,同时调整 host 和 origin 头,避免第三方 API 因跨域相关头报错
  • 响应回传:使用 async/await 处理 axios 的异步请求,将第三方 API 的状态码、响应头和数据完整回传给前端
  • 错误处理:捕获请求过程中的异常,将第三方返回的错误信息或服务器内部错误信息返回给前端,便于调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:10:01