我正在客户端使用节点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上。如果我在这些本地托管页面之一上调用cloud函数,例如firebase.functions().httpsCallable('functionName')并在开发人员工具中检查“网络”面板,则可以看到Request URL是https://us-central1-<app-name>.cloudfunctions.net/<functionName>而不是localhost:5001/<app-name>/us-central1/<functionName>

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

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

我不是在制作单个页面的应用程序,也不是在使用任何 View 框架。

最佳答案

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

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

编辑:像下面的 goker.cebeci 一样,连接到本地仿真器的正确方法是使用functions.useFunctionsEmulator('http://localhost:5001')(将http://localhost:5001更改为运行本地仿真器的任何地址)

更新后的代码如下所示:
if (process.env.NODE_ENV === 'development') {
  const functions = firebase.functions()
  functions.useFunctionsEmulator('http://localhost:5001')
}

关于firebase - 在本地托管的Firebase应用程序中使用本地模拟的https.onCall Firebase函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50975232/

10-11 22:44
查看更多