Firebase Function onWrite触发后event.data返回undefined问题求助
解决Firebase Function onWrite事件无数据的问题
你遇到的是Firebase Functions版本API变更导致的典型问题——你的代码用的是旧版(v0.x)的onWrite事件API,但当前运行环境已经是v1+版本,两者参数结构完全不同,所以才会出现event.data为空的情况。
问题根源
在Firebase Functions v0.x版本中,onWrite的回调参数是(event, context),数据通过event.data获取;但升级到v1+后,回调参数变成了(change, context),数据需要通过change.before(变更前的数据快照)和change.after(变更后的数据快照)来访问,event.data这个属性已经被移除了。
修正后的代码
把你的函数代码改成下面这样,适配v1+的API:
var functions = require('firebase-functions'); var admin = require('firebase-admin'); admin.initializeApp(); var firestore = admin.firestore(); var logInLogOutListner = require('./logInLogOutListner'); exports.listenForLogInLogOut = functions.database.ref('/message') .onWrite((change, context) => { // 用change.after替代原来的event.data const dataSnapshot = change.after; console.log("data:" + JSON.stringify(dataSnapshot.val()) + " change:" + JSON.stringify(change)); if (!dataSnapshot.exists()) { return; } logInLogOutListner.listenForLogInLogOut(firestore, dataSnapshot); return null; });
额外检查点
- 确认你的
package.json中firebase-functions的版本是v1或更高,可以通过npm list firebase-functions查看,若版本过低,执行npm install firebase-functions@latest --save升级。 - 如果你的
logInLogOutListner.js里也是基于旧版event.data编写的,记得同步修改里面的逻辑,改用传入的dataSnapshot(也就是change.after)。
这样修改后,应该就能正常获取到onWrite事件中的数据了。
内容的提问来源于stack exchange,提问作者parvesh
相关产品推荐
相关产品推荐

