【问题标题】:Firebase hosting custom domain 404 when forwarding requests to Cloud Functions将请求转发到 Cloud Functions 时,Firebase 托管自定义域 404
【发布时间】:2020-04-28 23:54:22
【问题描述】:

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

根据 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)

为什么 Firebase 托管域不提供我的 API?

亲切的问候 /K

【问题讨论】:

    标签: firebase express google-cloud-functions firebase-hosting


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯,但实际上我使用的是这样的快速路线:“/v1/:id1/:userId/ical”所以我不知道会请求哪些路线。我已更新问题以反映这一点。
    • 啊,我明白了! (^__^)/ 我之前有点快。是的,这行得通!非常感谢您的及时回复 - 一如既往!
    【解决方案2】:

    注意,对于那些尝试部署到 us-central1 以外的区域并遇到此 404 错误的用户,仅在 us-central1 上支持使用 firebase 的 firebase 功能。

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

    重要提示:Firebase Hosting 仅在 us-central1 中支持 Cloud Functions。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-07-05
        • 1970-01-01
        • 2018-09-13
        • 2016-03-16
        • 2020-11-01
        • 1970-01-01
        • 2019-01-08
        • 2017-11-03
        • 2016-09-18
        相关资源
        最近更新 更多