Firebase部署后/api/send路径404错误排查及解决请求
解决Firebase Hosting访问云函数API返回404的问题
嘿,我之前也碰到过一模一样的问题,咱们一步步排查解决:
1. 先确认云函数有没有部署!
你只执行了firebase deploy --only hosting部署静态资源,但云函数是独立的服务,得单独部署才行。赶紧跑一下这条命令:
firebase deploy --only functions
嫌麻烦的话也可以同时部署Hosting和云函数,避免漏项:
firebase deploy --only hosting,functions
部署完记得去Firebase控制台的「函数」页面看看,你的send函数是不是显示「正常运行」状态。
2. 检查firebase.json的重写配置
这是最容易踩坑的环节!你得确保Hosting的rewrites规则把/api/**开头的请求转发到对应的云函数。正确的配置大概长这样:
{ "hosting": { "public": "你的静态文件目录(比如dist/public)", "rewrites": [ { "source": "/api/**", "function": "send" // 这里必须和你云函数的导出名称完全一致! } ] }, "functions": { "runtime": "nodejs18" // 换成你实际使用的Node.js版本 } }
⚠️ 额外提醒:如果你的云函数部署在非默认区域(比如europe-west1),还得在rewrite规则里加上区域信息:
{ "source": "/api/**", "function": { "functionId": "send", "region": "europe-west1" } }
3. 核对云函数的路由逻辑
看看你的云函数代码是不是正确处理了/send路径:
- 如果你用Express框架搭建函数:
const functions = require('firebase-functions'); const express = require('express'); const app = express(); // 这里的路由要对应你访问的/send路径 app.post('/send', (req, res) => { // 你的业务逻辑代码 res.status(200).send('请求处理成功'); }); // 导出的函数名要和firebase.json里的function字段完全匹配 exports.send = functions.https.onRequest(app); - 如果不用Express,直接写原生HTTP函数:
exports.send = functions.https.onRequest((req, res) => { // 要判断请求路径和方法是否匹配 if (req.path !== '/send' || req.method !== 'POST') { return res.status(404).send('Not found'); } // 你的业务逻辑代码 res.status(200).send('请求处理成功'); });
这里要注意:通过Hosting的rewrite访问时,请求路径里的/api/会被自动剥离,传给云函数的实际路径是/send,所以你的函数里必须处理这个路径才行。
4. 最后检查云函数的运行状态
去Firebase控制台的「函数」页面,点开你的send函数,查看「日志」有没有部署失败、运行时报错之类的信息——这些隐性错误也可能导致请求返回404。
按上面的步骤排查下来,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者Taha Younis
相关产品推荐
相关产品推荐

