我有一个应用程序连接到谷歌firebase实时数据库。我想测试谷歌云功能作为服务器运行后端功能触发每天一次或触发的数据在数据库中更改
我有一个模拟器实例在本地运行,其中包含我编写的typescript函数。我有实时数据库运行,连接到应用程序和工作良好。
现在当我更改数据库中的数据时,这些函数不会被触发。
function in index.ts:
import * as functions from "firebase-functions";
exports.simpleDbFunction = functions.region('europe-west1').database.ref('/some path in the database')
.onCreate((snap, context) => {
console.log("functions triggered by datachange:", snap.val())
});
firebase工程连接到正确的工程(使用终端的接口)。应用程序和实时数据库目前正在工作,我可以看到在firebase控制台中数据的变化。
我错过了什么?
我还尝试了google文档中更复杂的例子(makeUppercase函数)。但是当它不起作用时,我回到了一个简单的函数,该函数在数据创建时触发并打印到控制台。
编辑:我注意到,在模拟器UI的实时数据库是空的。它不应该连接到应用程序的实时数据库吗?这不是为什么我连接模拟器到一个特定的项目?编辑2:我试着把函数行改成:
functions.region('europe-west1').database.instance("rtdb") .ref(…
,我得到一个错误,说事件函数有畸形的资源成员
我解决了这个问题:
-
我发现您无法真正从本地模拟器连接到实际google firebase的生产环境。(这有点奇怪,甚至在你有机会看到任何实际操作的代码之前,你必须致力于这项技术)<—修复我,如果我对这个错了
-
如果您使用实时数据库云功能,则不能使用除'us-central1'以外的任何区域。如本文件所述:https://firebase.google.com/docs/functions/locations
-
你可以将你的应用程序连接到你机器上的本地模拟器!获取数据库实例:
firebaseddatabase database = firebaseddatabase . getinstance ();
在第一个数据库操作之前,在你的应用程序中添加以下行(这很奇怪):
database.useEmulator("10.0.2.2" 9004);
将9004更改为本地实时数据库端口。