如何为 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/abcdef
、localhost:5000/testing
等随机端点发出请求不会被重定向,因此请求失败。那么 source
应该是什么?
现在,假设我不想重定向到我的 public 目标目录,而是想使用 Express 重定向到 firebase 函数。
"rewrites": [
{
"source": "**",
"destination": "app"
}
]
好吧,这在模拟器中也不起作用 localhost:5000。 尽管我可以在模拟器中看到功能正常工作(Express 应用程序)localhost:5001
我在想,因为 /functions
目录不是 dist
文件夹的一部分。但是为什么重定向到 dist/project-name
也不起作用?有任何想法吗?谢谢!
好吧,我必须尝试一些事情并阅读文档以了解我在做什么。
文档:
- https://firebase.google.com/docs/hosting/functions#use_a_web_framework
- 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。
我很难理解 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/abcdef
、localhost:5000/testing
等随机端点发出请求不会被重定向,因此请求失败。那么 source
应该是什么?
现在,假设我不想重定向到我的 public 目标目录,而是想使用 Express 重定向到 firebase 函数。
"rewrites": [
{
"source": "**",
"destination": "app"
}
]
好吧,这在模拟器中也不起作用 localhost:5000。 尽管我可以在模拟器中看到功能正常工作(Express 应用程序)localhost:5001
我在想,因为 /functions
目录不是 dist
文件夹的一部分。但是为什么重定向到 dist/project-name
也不起作用?有任何想法吗?谢谢!
好吧,我必须尝试一些事情并阅读文档以了解我在做什么。
文档:
- https://firebase.google.com/docs/hosting/functions#use_a_web_framework
- 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);
。但是,us-central1
的 Cloud Functions。