You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:02