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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:36:11