我正在客户端使用节点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/