Firebase函数部署报错:functions.firestore.document is not a function 求助解决
Firebase函数部署报错:functions.firestore.document is not a function 求助解决
嘿,这个报错我之前也碰到过,大概率是你用的Firebase Functions SDK版本和代码语法不兼容导致的!下面给你两种解决方案,你可以根据情况选:
方案一:降级SDK到v1版本(不用改代码)
如果不想调整代码结构,直接把firebase-functions降级到v1.x版本就行,因为你的代码是v1的语法:
- 先卸载当前版本:
npm uninstall firebase-functions
- 安装v1版本:
npm install firebase-functions@1
- 重新部署函数:
firebase deploy --only functions
方案二:升级代码到v2版本语法(推荐,更适配最新特性)
Firebase Functions v2版本重构了触发器的写法,旧的functions.firestore.document()语法不再适用,改成下面的写法就行:
修改你的函数代码:
const admin = require("firebase-admin"); // 注意这里的导入方式变了 const { onDocumentCreated } = require("firebase-functions/v2/firestore"); admin.initializeApp(); exports.sendNotificationOnNewMessage = onDocumentCreated("messages/{s}/messages/{r}/pm/{id}", async (event) => { // v2里用event.data.data()获取文档数据 const messageData = event.data.data(); // 参数从event.params里取 const { s, r } = event.params; const u = await admin.firestore().collection("users").doc(r).get(); if (!u.exists) { console.log(`User ${r} not found in users collection.`); return null; } const receiverToken = u.data().token; if (!receiverToken) { console.log(`Skipping notification.`); return null; } const payload = { notification: { title: `New message from ${s}`, body: messageData.content, }, token: receiverToken, }; try { await admin.messaging().send(payload); console.log("Notification sent successfully"); } catch (error) { console.error("Error sending notification:", error); } return null; });
另外记得同步升级firebase-admin到最新版本,避免版本兼容问题:
npm install firebase-admin@latest
最后,你的Firestore规则是没问题的,和这个报错无关,不用调整~
备注:内容来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

