将Firebase托管根目录重定向到云功能不起作用

时间:2017-07-02 12:59:16

标签: javascript express firebase google-cloud-functions firebase-hosting

我正在使用Firebase Hosting和一个firebase.json文件,该文件应该将所有流量转发到云功能(预渲染),该功能会填充SEO的元标记和og标记。

{
  "hosting": {
      "public": "dist/prod",
      "rewrites": [
       {
          "source": "**",
          "function": "prerender"
       }
      ]
   }
}

我的prerender函数正在处理请求并呈现HTML文件。这很好用:

export const prerender = functions.https.onRequest((req, res) => {
   console.log('prerender function: "' + req.path + '"');
   ...
}

点击https://xxx.cloudfunctions.net/prerender处的结束点时,我正确地在功能 - >下的Firebase信息中心中接听电话。日志:

prerender function: "null"

但是,在调用https://mypage.firebaseapp.com时,我没有得到任何日志,它似乎在我的index.html文件夹中呈现dist/prod

重写有什么我想念的吗?我尝试将/重写为同一个函数,但没有成功。任何提示都非常赞赏!

1 个答案:

答案 0 :(得分:16)

您应该能够以您正在显示的方式将所有网址路由到某个功能。我猜你的dist / prod目录中仍然有一个index.html文件。在我的测试项目中,我只是将根index.html重命名为其他内容,并且/的请求被路由到我的函数。

事实证明,如果存在与客户端请求URL匹配的静态Web内容,则会提供该内容,而不是委托给该函数。对于任何传入的URL都是如此。真正确保将所有请求路由到您的函数的唯一方法是在部署之前从dist/prod文件夹中删除所有内容。

我认为关键信息在rewrites的文档中:

  

仅当文件或文件夹不存在时才应用重写规则   指定的源,并返回该文件的实际内容   目的地而不是HTTP重定向。