Firestore V9获取文档时程序无限挂起问题求助
排查ExpressJS + Firestore数据请求无限挂起的问题
检查Firestore初始化是否正确
确认db实例已完成初始化,避免在初始化未完成时调用getDocs。确保初始化代码只执行一次,示例如下:const { initializeApp, cert, getApps } = require('firebase-admin/app'); const { getFirestore } = require('firebase-admin/firestore'); const serviceAccount = require('./serviceAccountKey.json'); if (!getApps().length) { initializeApp({ credential: cert(serviceAccount) }); } const db = getFirestore();确保路由正确返回响应
无论使用await还是.then(),必须调用res.send()或res.json()向客户端返回结果,否则请求会一直处于等待状态。示例:app.get('/releases', async (req, res) => { try { const querySnapshot = await getDocs(collection(db, "releases")); const releases = []; querySnapshot.forEach(doc => { releases.push({ id: doc.id, ...doc.data() }); }); res.json(releases); } catch (err) { res.status(500).json({ error: err.message }); } });验证Firestore安全规则
如果安全规则拒绝当前请求的读取权限,会导致请求静默挂起。测试阶段可临时设置宽松规则(上线前务必修改):rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }捕获异步代码错误
使用.then()时必须搭配.catch()处理异常,避免错误被吞掉导致无响应:app.get('/releases', (req, res) => { getDocs(collection(db, "releases")) .then(querySnapshot => { const releases = []; querySnapshot.forEach(doc => releases.push({ id: doc.id, ...doc.data() })); res.json(releases); }) .catch(err => { res.status(500).json({ error: err.message }); }); });排查网络与环境问题
确认服务器能正常访问Firestore服务,检查防火墙是否屏蔽Google API端口,本地开发环境是否有稳定网络连接,部署服务器的网络策略是否允许出站请求到Firestore域名。
内容的提问来源于stack exchange,提问作者ianman18
相关产品推荐
相关产品推荐

