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

React向部署在Firebase的Node.js后端发送数据以调用API的问题排查

问题排查与修复方案

核心问题其实很直观:你的前端用POST方法发送请求,但后端对应的是GET路由——而GET请求是没有请求体(request.body)的,所以后端根本拿不到你传的favorites数据。下面是具体的修复步骤:

1. 修复后端Node.js代码

首先要把路由方法改成post,同时必须添加express.json()中间件(Express默认不会自动解析JSON格式的请求体),这样才能正确读取前端传来的数据:

const functions = require("firebase-functions");
const express = require("express");
const fetch = require("node-fetch");
const cors = require("cors");
const app = express();

app.use(cors({origin: true}));
// 新增:解析JSON格式的请求体,这一步必不可少
app.use(express.json());

// 把app.get改为app.post,和前端请求方法匹配
app.post('/', async (request, response) => {
  try {
    // 现在可以正常拿到前端传的favorites了
    const favorites = request.body.favorites;
    // 用模板字符串拼接URL更清晰
    const url = `${web}${favorites}${key}`;
    
    const fetchResponse = await fetch(url);
    const symbol = await fetchResponse.json();
    response.json(symbol);
  } catch (error) {
    // 新增错误处理,方便排查API调用或请求过程中的问题
    response.status(500).json({error: error.message});
  }
});

2. 优化前端React代码(可选但推荐)

前端的请求逻辑本身没问题,但可以加上错误处理,避免请求失败时没有任何提示:

componentDidMount() {
  fetch('http://localhost:5001/', {
    method: 'post',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({ favorites: this.state.favorites})
  })
  .then((response) => {
    // 先检查响应状态是否正常
    if (!response.ok) {
      throw new Error(`请求失败,状态码: ${response.status}`);
    }
    return response.json();
  })
  .then(stockList => {
    this.setState({ stocks: stockList });
    console.log(stockList);
  })
  .catch(error => {
    // 捕获请求或解析过程中的错误
    console.error('数据请求出错:', error);
  });
}

为什么之前硬编码能工作?

之前你直接在后端硬编码API参数时,用的是GET路由——GET请求不需要依赖请求体,后端可以直接用硬编码的参数调用第三方API,所以功能正常。现在要传递前端的数据,就必须保证请求方法和路由匹配,同时让后端正确解析请求体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:59:03