具有单页应用程序的Firebase功能自定义域

时间:2019-02-20 14:05:22

标签: firebase google-cloud-functions single-page-application firebase-hosting

我有一个Firebase托管的单页应用程序。

我还具有3种Firebase功能(联系方式,计划,功能),应用程序和外部资源向其发出请求。

我的应用程序有一个自定义域,我想通过该域访问我的功能。

这是我当前的firebase.json配置

{
  "hosting": {
    "public": "www",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

因此,当前所有流量都流向我的应用,并且路由是通过我的SPA处理的。目前,必须通过cloudfunctions.net URL来访问我的函数,这并不理想。

如何为该配置添加URL重写条目,以便通过我的自定义域 访问我的功能,而我的单页应用处理其余路由?

我已经尝试过以下features端点:

"rewrites": [
  {
    "source": "/features/**",
    "function": "features"
  },
  {
    "source": "!/features/**",
    "destination": "/index.html"
  }
]

我在函数index.js中的位置:

...
exports.plans = functions.https.onRequest(plansApi);
exports.features = functions.https.onRequest(featuresApi);
exports.contact = functions.https.onRequest(contactApi);

但是我收到404 Cannot GET /features/123作为答复吗?

1 个答案:

答案 0 :(得分:2)

几件事:

  1. 请确保您的featuresApi处理程序与完整URL路径匹配(例如/features/123而非/123)。 Firebase Hosting会将功能的完整路径转发给功能,而不仅仅是**部分。
  2. 按顺序解决了重写,因此无需为第二个重写源执行!/features/****应该很好,因为如果它与/features/**相匹配,它将已经与第一次重写并解析为该函数相符。

基于错误消息,似乎(1)是这里的罪魁祸首。