将请求转发到 Cloud Functions 时 Firebase 托管自定义域 404

Firebase hosting custom domain 404 when forwarding requests to Cloud Functions

我在 Google Cloud Functions (https://us-central1-myproject-name.cloudfunctions.net/api/v1/123/456/ical.ics) 上设置了 api。这很好用,但我想为 api 设置一个 "friendly" 域名。 :)

根据 Google 的文档,这似乎很容易,但我无法弄清楚如何让托管服务于我的 api 功能。当导航到我的友好名称 (https://api.mydomain.com/api/v1/123/456/ical.ics) 时,我收到错误 404。

Cannot GET /api/v1/123/456/ical.ics

我已经验证了域并根据文档使用以下代码更新了 firebase.json 文件。

  {
    "source": "/api/**",
    "function": "api"
  }

我的函数的非常简化的表示

const app = express()
app.use(cors({ origin: true }))
const express = require('express')

app.get('/v1/:catId/:userId/ical', async (req, res) => {
  ...
}

app.post('/v1/mail', async (req, res) => {
  ...
}

exports.api = functions.region('us-central1').https.onRequest(app)

为什么我的 api 没有被 firebase 托管域服务?

亲切的问候/K

您的 Express 路由需要与传入的 URL 完全匹配,而不仅仅是通配符部分。

app.get('/api/v1/ical', async (req, res) => {
  ...
}

app.post('/app/v1/mail', async (req, res) => {
  ...
}

我相信你也可以告诉 Express 在前缀处挂载一个应用程序,以便使用 use() 方法将相同的前缀应用于所有路由。

我不确定,但在我清除 ALL 浏览历史记录后,使用 Firebase 页面中的示例对我有用。 希望对以后看这个问题的人有所帮助。

请注意,对于尝试部署到 us-central1 以外的其他区域并遇到此 404 错误的用户,仅 us-central1.

支持使用 firebase 中的 firebase 函数

参考:https://firebase.google.com/docs/hosting/functions

Important: Firebase Hosting supports Cloud Functions in us-central1 only.