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);
验证步骤
- 本地测试:运行
firebase emulators:start,访问http://localhost:5001/[你的项目ID]/[部署区域]/api/some-data确认返回正常。 - 重新部署:执行
firebase deploy --only functions,部署完成后访问Cloud Functions的官方URL并追加/some-data路径测试。
内容的提问来源于stack exchange,提问作者abeer
相关产品推荐
相关产品推荐

