将请求转发到 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.
我在 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
.
参考:https://firebase.google.com/docs/hosting/functions
Important: Firebase Hosting supports Cloud Functions in us-central1 only.