我使用聚合物2.0和聚合物火力建造的PWA,是我的网络应用程序。我有一个快速应用程序充当云功能(微服务)。
示例:exports.register=functions.https.onRequest(app);
如何添加重写规则以将/fns/register
和/fns/verify
映射到上述应用register
。
我已经在云功能微服务项目中更新了我的firebase.json
文件,但是当我运行firebase deploy --only functions:register
时,它说没有用于部署托管配置的公共文件夹!
{
"hosting": {
"rewrites": [{
"source": "/fns/**", "function": "register"
}]
}
}
在原始Web应用程序中维护重写规则可能是一种选择,但仍然不是理想的恕我直言。如果我要在原始的Web应用程序中执行此操作,我也尝试过,但无法实现。以下是我在原始网络应用中更新的firebase.json
:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "build/default/public",
"rewrites": [
{
"source": "/fns/**",
"function": "register"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
答案 0 :(得分:25)
维护所有资源(主机,功能和数据库)只需一个项目是理想的,我认为这是管理Firebase项目的正确方法。
您正尝试更改托管服务的一个参数(重写),而不是它的工作方式。部署firebase.json时,将覆盖所有其他配置。所以,你得到的错误是因为Firebase没有查看最后一个配置文件并检查更新有什么不同,它只是试图覆盖所有最后的配置文件并得到一个错误,因为“public”是托管所必需的参数。 / p>
这解释了,现在您希望Firebase将/fns/register
重写为/register
,但它不会发生。您的函数将收到“完整”网址/fns/register
。
我认为,最好的方法是创建根路由:
var functions = require('firebase-functions');
var express = require('express');
var app = express();
var router = express.Router();
router.post('/register', registerFunction);
router.post('/verify', verifyFunction);
app.use('/fns', router);
exports.fns = functions.https.onRequest(app);
并将所有函数重写为fns
函数:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "build/default/public",
"rewrites": [
{
"source": "/fns/**",
"function": "fns"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
现在,您可以使用https://<your-project-id>.firebaseapp.com/fns/register
来覆盖您的注册功能,并使用https://<your-project-id>.firebaseapp.com/fns/verify
来验证您的验证功能。
答案 1 :(得分:0)
此问题已在Firebase Hosting with dynamic cloud functions rewrites
中得到解答我同意你的看法,最好将SPA保留在一个项目中,将微服务保留在另一个项目中,但@Marcos V正确使用根函数
答案 2 :(得分:-2)
我已经投了Marcos V.的回答,但我不能接受这个答案。主要是因为在微服务世界中,您不会在一个地方创建具有所有功能的巨石。您宁愿分成可管理的块,并为应用程序提供必要/合理的适当微服务。
使用firebase-hosting进行当前设置时,您必须单独在一个项目中拥有主机配置文件。此外,托管应该在一个项目中,因为与您的站点相关的所有HTML,JS,CSS都具有相互依赖性,因此是不可分割的(至少截至目前)。
尽管云功能更好地被视为服务于确定目的的微服务,因此需要根据需要在单独的项目/微服务中。哪个可以使用firebase deploy --only functions:YOUR_FN_NAME
每当您需要为新的云功能微服务添加映射时,请继续在主要宿主应用程序中进行路由更改并进行部署。通过这种方法,我们至少可以将后端部分作为微服务。
现在,在同一个托管应用程序或单独的项目中维护数据库规则,由设计人员根据其用例决定。