如何在firebase-hosting中配置重写规则以将某些请求路由到云功能?

Pha*_*ani 13 firebase firebase-hosting google-cloud-functions

我有一个使用聚合物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"
        }]
    }    
}
Run Code Online (Sandbox Code Playgroud)

在原始Web应用程序中维护重写规则可能是一种选择,但仍然不是理想的恕我直言.如果我要在原始的Web应用程序中执行此操作,我也尝试过,但无法实现.以下是我firebase.json在原始网络应用程序中的更新:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/default/public",
    "rewrites": [
      {
        "source": "/fns/**",
        "function": "register"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_* V. 30

维护所有资源(主机,功能和数据库)的一个项目是理想的,我认为是管理Firebase项目的正确方法.

您正在尝试更改托管服务的一个参数(重写),而不是它的工作方式.部署firebase.json时,将覆盖所有其他配置.所以,你得到的错误是因为Firebase看起来不是最后一个配置文件并检查更新有什么不同,它只是试图覆盖所有最后的配置文件并得到一个错误,因为"public"是托管所需的参数.

这解释了,现在你期望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);
Run Code Online (Sandbox Code Playgroud)

并重写所有fns功能:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/default/public",
    "rewrites": [
      {
        "source": "/fns/**",
        "function": "fns"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用它https://<your-project-id>.firebaseapp.com/fns/register来访问您的注册功能并https://<your-project-id>.firebaseapp.com/fns/verify获得验证功能.

  • @Phani您的问题标题根本没有提到对单独项目的要求。也许您可以接受这个答案(它回答了您的主要问题)并提出了另一个问题,即如何能够在单独的项目中维护重写规则和功能? (3认同)