为何调用.get()时出现TypeError: posts.get is not a function错误?
问题原因及解决办法
核心原因
你使用的是Firebase v9及以上的模块化SDK,但代码写法沿用了v8及以下的命名空间风格,两者API结构完全不同:
- v9+的
collection()返回的是集合引用对象,本身没有.get()方法 - 旧版v8的
db.collection()返回的对象才带有.get()方法
两种解决方式
方式1:使用v9+模块化API(推荐)
需要导入getDocs方法,通过它来获取集合的文档快照:
import { collection, getDocs } from "firebase/firestore"; const posts = collection(db, 'Posts'); async function getAllDocs() { const snapshot = await getDocs(posts); snapshot.forEach(doc => { console.log(doc.id, '=>', doc.data()); }); }
方式2:兼容旧版命名空间写法
如果想继续用旧版代码风格,可以导入Firebase的compat兼容包:
import firebase from "firebase/compat/app"; import "firebase/compat/firestore"; const db = firebase.firestore(); const posts = db.collection('Posts'); async function getAllDocs() { const snapshot = await posts.get(); snapshot.forEach(doc => { console.log(doc.id, '=>', doc.data()); }); }
注:Firebase官方文档会同时展示两种版本的代码,注意区分你当前使用的SDK版本对应的写法。
内容的提问来源于stack exchange,提问作者HarryNC
相关产品推荐
相关产品推荐

