在本地托管的Firebase应用程序中使用本地模拟的https.onCall Firebase函数

时间:2018-06-21 18:19:33

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

我正在客户端使用节点SDK和原始JavaScript编写Firebase应用程序。我正在使用Firebase Cloud Functions实现服务器,该服务器接收对我的页面路由的请求,并使用https.onRequest方法返回渲染的HTML。我还使用Cloud Functions通过https.onCall方法来处理客户端-服务器交互。

我使用firebase serve命令在本地进行开发。在本地开发时,客户端似乎忽略了本地onCall函数,而是为已部署的onCall函数调用路由。为了查看本地更改,我不得不部署onCall函数。如果我不部署每个更改,则我的本地应用程序将不会显示对onCall函数的任何更改。无论我运行firebase serve还是firebase serve --only=hosting,functions,都会发生这种情况。

当我使用firebase serve在本地运行我的应用程序时,页面通常托管在localhost:5000上。这些函数托管在localhost:5001上。如果我在这些本地托管页面之一上调用云功能,例如firebase.functions().httpsCallable('functionName'),并在开发人员工具中检查“网络”面板,则可以看到请求URL为https://us-central1-<app-name>.cloudfunctions.net/<functionName>,而不是localhost:5001/<app-name>/us-central1/<functionName>

这让我感到沮丧,因为这意味着我必须部署功能来测试每个更改,而不是通过本地托管的Web应用程序测试本地功能。

我配置不正确吗?如何获得本地托管的应用程序以使用本地仿真的onCall云功能?

我没有制作单个页面的应用程序,也没有使用任何视图框架。

1 个答案:

答案 0 :(得分:8)

Firebase似乎尚未实现指向本地服务器的解决方案,因此我想到了一个小技巧。包括以下代码片段,用于初始化Firebase项目。希望对您有帮助!

if (process.env.NODE_ENV === 'development') {
  firebase.functions()._url = function (name) {
    return `${process.env.API_URL}/${name}`
  }
}