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

Firebase Cloud Functions返回404(Cannot Get)错误排查求助

排查Firebase Cloud Functions 404错误的解决方案

核心问题分析

你的代码存在中间件与路由挂载顺序错误,以及本地监听代码冗余的问题,导致部署后路由无法被正确识别。

具体问题点与修复步骤

  • 导出函数时机过早
    你在挂载bodyParser、cors和自定义路由之前就导出了api函数,此时Express app还未应用这些关键配置,部署后后续的路由和中间件完全不会生效。
    修复:将exports.api = functions.https.onRequest(app);移到所有中间件、路由挂载及数据库连接操作之后。

  • 本地监听代码无需部署
    app.listen(3001)仅用于本地测试,Firebase Cloud Functions会自动处理请求监听逻辑,部署时这段代码无效,建议通过环境变量判断仅在本地执行。

  • TypeScript类型缺失
    代码中使用了Request类型但未导入,会触发编译错误,需从express库中导入对应类型。

修复后的完整代码

import express = require("express");
import bodyParser = require("body-parser");
import cors = require("cors");
import { connectDb } from "./db";
import routes from "./routes/index";
import functions = require("firebase-functions");
// 导入express的类型定义
import { Request, Response } from "express";

const app = express();

// 先挂载所有中间件
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
app.use(cors());
// 挂载自定义路由
app.use(routes);
// 挂载测试路由
app.get("/some-data", (request: Request, response: Response) => {
  response.send("server");
});

// 连接数据库
connectDb();

// 仅在本地环境启动监听
if (process.env.NODE_ENV !== "production") {
  app.listen(3001, () => console.log("Listening on http://localhost:3001"));
}

// 最后导出Cloud Function
exports.api = functions.https.onRequest(app);

验证步骤

  1. 本地测试:运行firebase emulators:start,访问http://localhost:5001/[你的项目ID]/[部署区域]/api/some-data确认返回正常。
  2. 重新部署:执行firebase deploy --only functions,部署完成后访问Cloud Functions的官方URL并追加/some-data路径测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:42:40