从Firestore读取数据到自建网站提示数据库不存在如何解决
解决方案
1. 修复Admin SDK初始化配置
当前admin.initializeApp配置存在核心错误:databaseURL参数填入了服务账号邮箱,该参数本为实时数据库所用,仅需填写对应数据库地址,若仅使用Firestore可直接省略该参数。
同时云函数运行环境默认已绑定项目权限,无需手动引入服务账号文件,且需保证全局仅初始化一次Admin SDK,避免和其他云函数文件的初始化操作冲突:
// 删掉手动引入serviceAccount的代码,直接无参初始化即可 admin.initializeApp();
如果必须本地使用服务账号验证,仅需传入credential参数即可,无需额外配置databaseURL。
2. 修正getFirestore函数逻辑
当前函数没有返回值,且admin.firestore()为同步方法无需await,回调写法和async/await混用逻辑混乱,修改为统一的async/await写法:
async function getFirestore() { const firestore_con = admin.firestore(); try { const doc = await firestore_con.collection('device').doc("device").get(); if (doc.exists) { return doc.data(); } else { console.log("No such document!"); return null; } } catch (err) { console.log('Error getting document', err); return null; } }
3. 匹配数据库实际路径
检查Firestore中的实际数据结构是否和代码路径一致:
- 确认集合名拼写为
device,无大小写、拼写偏差 - 确认
device集合下存在ID为device的文档,若实际文档ID为设备编号等其他值,需修改doc()方法内的参数为对应ID
4. 本地测试配置调整
使用firebase serve测试时默认会连接线上Firestore,需先执行firebase use 你的项目ID切换到对应项目,且保证CLI登录的账号有数据库访问权限。
如果要本地离线测试,可启动Firestore模拟器,执行命令:firebase emulators:start --only hosting,functions,firestore
5. 清理冗余代码
删除代码中无用的引入行,避免不必要的干扰:
// 以下两行可直接删除 const { service } = require("firebase-functions/v1/analytics"); const { response } = require("express");
内容的提问来源于stack exchange,提问作者Javier Wong
相关产品推荐
相关产品推荐

