Firebase功能:通过功能路由每个URL,并从“托管”服务

时间:2019-10-14 08:41:16

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

我正在尝试将子域中的每个url通过firebase函数进行路由。这是我的配置:

功能文件:

const functions = require('firebase-functions');

exports.handleWebRequest = functions
  .region('europe-west1')
  .https
  .onRequest((req, res) => {
    res.send('Currently down.');
  });

我的firebase.json

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "handleWebRequest"
      }
    ]
  },
  "functions": {
    "source": "firebase-functions",
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint"
    ]
  }
}

当我部署主机和功能并转到浏览器中的URL时,我希望我打开的每条路线都显示“当前关闭”。但是,每条路由除外,根路由都会显示“当前关闭”消息,而根路由则显示我部署的index.html

因此,简而言之:

/显示了我的index.html(我不想要)
/whatever显示“当前关闭”。 (就是我想要的

我之所以尝试通过该功能路由所有内容,是因为我想使用HTTP Basic Auth屏蔽网站,而Firebase不支持HTTP Basic Auth。

2 个答案:

答案 0 :(得分:3)

这很可能是因为您在index.html文件夹下仍然有public文件。

doc中所述:

  

注意:公共目录中的静态文件优先于   重写,因此所有静态文件都将与云一起提供   功能端点。

如果您删除index.html文件,它应该会按您期望的方式工作。

答案 1 :(得分:3)

您的功能已部署到“ europe-west1”区域,但是Firebase Hosting当前仅支持默认的“ us-central1”。 documentation中对此进行了说明:

  

重要提示:Firebase托管仅在us-central1中支持云功能。