如何在 firebase 托管上使用 node.js 处理根路径请求?
how to handle root path request with node.js on firebase hosting?
我正在使用 firebase 托管 + 函数开发网络系统。
尽管在 firebase.json 上指定了重写规则,
部分路由不起作用。
root/
├ functions/
│ ├index.js
│ ├routes/
│ │ └ index.js
│ └views/
│ ├ index.jade
│ └ sub.jade
└ public/
└index.html // this is created by default. I don't want to use this.
这是我的firebase.json
"rewrites": [{
"source": "**",
"function": "app"
}],
这是 node.js 代码。
router.get('/', function(req, res, next) {
res.render('index');
});
router.get('/subdir', function(req, res, next) {
res.render('sub');
});
结果
https://myurl/ -> public/index.html is shown.(not handled on node.js)
https://myurl/ -> handled on node.js
你知道如何在 firebase 主机上使用 node.js 处理根路径请求吗?
参见 https://firebase.google.com/docs/hosting/full-config#hosting_priority_order。
Priority order of Hosting responses
The different Firebase Hosting configuration options described on this page can sometimes overlap. If there is a conflict, Hosting determines its response using the following priority order:
- Reserved namespaces that begin with a /__/* path segment
- Configured redirects
- Exact-match static content
- Configured rewrites
- Custom 404 page
- Default 404 page
Exact-match 静态内容的优先级高于配置的重写。
所以https://myurl/
获取静态内容/index.html
。
你能试试移除 public/index.html 吗?
我试过了。我可以重写。
参见https://github.com/zkohi/firebase-hosting-using-functions-samples。
- 创建一个空 的虚拟文件夹。例如:
dummyApiFolder
- 做一个很简单的云函数。例如。
exports.bla = functions.https.onRequest(async (req, res) => {
res.send("server bla");
});
- 使用以下托管规则
"hosting": {
"target": "api",
"public": "dummyApiFolder",
"rewrites": [
{
"source": "**",
"function": "bla"
}
]
}
3.1。 target
仅当您在 .firebaserc
文件
中进行设置时才需要
3.2。 "public": "dummyApiFolder",
是必需的。否则 CLI 将不允许部署
现在 所有 请求都应该转发到 bla
。
我建议从一个简单的云函数开始的原因是,express
可能设置不正确。这也会给你一个错误,但你最终不知道这是一个 firebase 问题还是代码问题!
很简单!只需将 public 目录中的 index.html
文件重命名为其他名称即可。另外,以防万一:在 firebase.json
文件中,更改 public
属性 的值
从 public
到 .
我正在使用 firebase 托管 + 函数开发网络系统。 尽管在 firebase.json 上指定了重写规则, 部分路由不起作用。
root/
├ functions/
│ ├index.js
│ ├routes/
│ │ └ index.js
│ └views/
│ ├ index.jade
│ └ sub.jade
└ public/
└index.html // this is created by default. I don't want to use this.
这是我的firebase.json
"rewrites": [{
"source": "**",
"function": "app"
}],
这是 node.js 代码。
router.get('/', function(req, res, next) {
res.render('index');
});
router.get('/subdir', function(req, res, next) {
res.render('sub');
});
结果
https://myurl/ -> public/index.html is shown.(not handled on node.js)
https://myurl/ -> handled on node.js
你知道如何在 firebase 主机上使用 node.js 处理根路径请求吗?
参见 https://firebase.google.com/docs/hosting/full-config#hosting_priority_order。
Priority order of Hosting responses
The different Firebase Hosting configuration options described on this page can sometimes overlap. If there is a conflict, Hosting determines its response using the following priority order:
- Reserved namespaces that begin with a /__/* path segment
- Configured redirects
- Exact-match static content
- Configured rewrites
- Custom 404 page
- Default 404 page
Exact-match 静态内容的优先级高于配置的重写。
所以https://myurl/
获取静态内容/index.html
。
你能试试移除 public/index.html 吗?
我试过了。我可以重写。
参见https://github.com/zkohi/firebase-hosting-using-functions-samples。
- 创建一个空 的虚拟文件夹。例如:
dummyApiFolder
- 做一个很简单的云函数。例如。
exports.bla = functions.https.onRequest(async (req, res) => {
res.send("server bla");
});
- 使用以下托管规则
"hosting": {
"target": "api",
"public": "dummyApiFolder",
"rewrites": [
{
"source": "**",
"function": "bla"
}
]
}
3.1。 target
仅当您在 .firebaserc
文件
3.2。 "public": "dummyApiFolder",
是必需的。否则 CLI 将不允许部署
现在 所有 请求都应该转发到 bla
。
我建议从一个简单的云函数开始的原因是,express
可能设置不正确。这也会给你一个错误,但你最终不知道这是一个 firebase 问题还是代码问题!
很简单!只需将 public 目录中的 index.html
文件重命名为其他名称即可。另外,以防万一:在 firebase.json
文件中,更改 public
属性 的值
从 public
到 .