如何为 Firebase Hosting 和 Express 编写重定向规则

How to write redirect rules for Firebase Hosting and Express

我很难理解 firebase.json 重定向规则的工作原理。

在这里,我将 hosting 定义到我的网站,它完美地指向 dist/project-name 目录。

"hosting": [
{
  "target": "project-name",
  "public": "dist/project-name",
  "ignore": [
    "firebase.json",
    "**/.*",
    "**/node_modules/**"
  ],
 ...
 ...

但是,当我尝试实施重定向规则时,事情开始变得混乱。假设我希望将对不存在的文件和目录的请求重定向到我的托管 public 目标。我认为这是定义它的正确方法:

"rewrites": [
    {
      "source": "**",
      "destination": "dist/project-name"
    }
  ]

但是向 localhost:5000/abcdeflocalhost:5000/testing 等随机端点发出请求不会被重定向,因此请求失败。那么 source 应该是什么?

现在,假设我不想重定向到我的 public 目标目录,而是想使用 Express 重定向到 firebase 函数。

"rewrites": [
    {
      "source": "**",
      "destination": "app"
    }
  ]

好吧,这在模拟器中也不起作用 localhost:5000。 尽管我可以在模拟器中看到功能正常工作(Express 应用程序)localhost:5001

我在想,因为 /functions 目录不是 dist 文件夹的一部分。但是为什么重定向到 dist/project-name 也不起作用?有任何想法吗?谢谢!

好吧,我必须尝试一些事情并阅读文档以了解我在做什么。

文档:

  1. https://firebase.google.com/docs/hosting/functions#use_a_web_framework
  2. https://firebase.google.com/docs/hosting/full-config#rewrites

首先,我认为通过在 rewrites 中执行 "destination": "dist/project-name",url 总是 重定向到主机地点。因此,无论我走哪条路(即 /abc),它都会向我显示 index.html 文件。好吧,事实并非如此。重写甚至没有发生,我可以在日志中看到 http://localhost:4002/logs。我认为这是因为 priority order.

其次,我的 Express.js 应用在 firebase 中部署为一个函数。对 Cloud Functions 的重写应该是 "function": "app" 而不是 "destination": "app".

最后但同样重要的是,我的 Express.js Cloud Function 部署到 us-east1,就像这样 exports.app = functions.region("us-central1").https.onRequest(app);。但是, 我们可以看到 Firebase Hosting 目前只接受 us-central1 的 Cloud Functions。