Firebase Cloud Functions报错:类型'() => DocumentData'不存在属性'data'
解决Firebase Cloud Functions中
event.data.data()报错的问题 兄弟,你遇到的这个错误是因为Firebase Cloud Functions版本更新导致了Firestore触发器的API结构变化,你参考的Demo用的是旧版本写法,和当前安装的新版本不兼容。
问题根源
在旧版本的Firebase Functions(比如v2及以前)中,Firestore触发器的回调参数是一个event对象,需要通过event.data()获取文档快照,再调用data()方法拿到数据:
// 旧版本废弃写法 const data = event.data().data();
但在新版本的Functions(v3+,当前主流版本)中,Firestore触发器的回调参数变成了两个参数:第一个是文档快照DocumentSnapshot,第二个是包含上下文信息的Context对象。原来的event.data逻辑被简化成直接传入的snap参数,不需要再额外调用一次data()函数获取快照,直接用snap.data()就能拿到文档数据。
具体修改步骤
把你的代码从旧写法调整为新版本兼容的写法:
报错的旧代码示例
import * as admin from 'firebase-admin'; import * as functions from 'firebase-functions'; admin.initializeApp(functions.config().firebase); exports.newSubscriberNotification = functions.firestore.document('subscribers/{subscriptionId}').onCreate((event) => { // 此处触发报错:Property 'data' does not exist on type '() => DocumentData' const subscriberData = event.data.data(); // 后续业务逻辑... });
修复后的新代码
import * as admin from 'firebase-admin'; import * as functions from 'firebase-functions'; admin.initializeApp(); // 新版本无需传入functions.config().firebase,会自动完成初始化 exports.newSubscriberNotification = functions.firestore.document('subscribers/{subscriptionId}').onCreate((snap, context) => { // 直接通过snap.data()获取文档数据 const subscriberData = snap.data(); if (!subscriberData) { console.log("未获取到订阅者数据"); return null; } // 如需获取路径参数(比如subscriptionId),可通过context.params获取 const subscriptionId = context.params.subscriptionId; console.log(`新订阅者ID:${subscriptionId}`); // 你的通知推送等业务逻辑... return null; });
其他触发器的适配说明
如果使用onUpdate、onDelete等其他Firestore触发器,参数结构同样需要调整:
onUpdate:回调参数为(change, context),change.before是更新前的文档快照,change.after是更新后的文档快照onDelete:回调参数为(snap, context),snap是删除前的文档快照
修改完成后,重新部署Cloud Functions就能解决这个报错啦!
内容的提问来源于stack exchange,提问作者Daniel Hernandez
相关产品推荐
相关产品推荐

