firebase - 在本地托管的 Firebase 应用程序中使用本地模拟的 https.onCall Firebase 函数
问题描述
我正在客户端使用节点 SDK 和 vanilla 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
云功能?
我没有制作单页应用程序或使用任何视图框架。
解决方案
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')
}
推荐阅读
- javascript - 哪个 Firebase javascript 包应该与 React Native 一起使用?常规的“Firebase Web SDK”还是“react-native-firebase”?
- selenium - 在 azure devops 中运行 selenium 测试用例时遇到错误
- laravel - 具有预加载关系的 Laravel 模型
- postgresql - Postgresql 获取前 1000 个数据并将 10 x 10 传输到另一台服务器上的另一个数据库
- dynamics-crm - FaultException`1:不正确的属性值类型 System.String- 如何找出导致错误的字段,Dynamics CRM,
- .net - Objective C 等效于 .Net WebClient 上传文件
- php - 为什么我在循环中填充数组变量时为空?
- python - steamworks InitiateGameConnection() 中是否有类似的 python 函数?
- r - 为什么从 RStudio 运行脚本时遇到 R 致命错误
- mount - 使用 mtpmount 和 dokany 进行 MTP 热拔出 - 是否严格要求卸载?