使用Node.js Firebase Functions读取Firestore数据时authorUID返回undefined的问题求助
嘿,我来帮你捋捋这个问题,你遇到的authorUID返回undefined的情况,大概率是下面几个常见原因导致的,你可以一步步排查:
字段名拼写或大小写不匹配
先去Firebase控制台打开对应的board文档,仔细看看里面的字段名是不是真的叫userUID——Firestore的字段名是大小写敏感的,比如如果实际字段是UserUID或者userId,那你用userUID去取肯定会得到undefined。这是最容易踩的坑,优先确认这个!忘记判断文档是否存在
虽然你说boardID是正确导入的,但保险起见,一定要加个判断确认文档确实存在。如果因为某种原因(比如ID传错了、文档被删除了)boardDoc不存在,那boardDoc.data()会返回undefined,你再去取userUID自然也是undefined。可以在代码里加这段判断:if (!boardDoc.exists) { console.log('指定的board文档不存在哦!'); return; }先打印完整的boardData看看结构
你现在只盯着authorUID的日志,不如先把整个boardData打印出来,看看里面到底有哪些字段、数据结构是什么样的。比如在const boardData = boardDoc.data();后面加一行:console.log('完整的boardData内容:', boardData);这样你就能直观看到
boardData里有没有userUID这个字段,或者是不是字段名和你想的不一样。加上错误捕获避免隐形问题
建议把读取Firestore的代码包在try/catch里,万一读取过程中出现权限问题、网络问题(虽然云函数里概率低,但本地测试可能遇到),能及时捕获到错误信息,方便排查。比如:try { const boardDoc = await admin.firestore().collection('board').doc(boardID).get(); if (!boardDoc.exists) { console.log('board文档不存在'); return; } const boardData = boardDoc.data(); console.log('boardData内容:', boardData); const authorUID = boardData.userUID; console.log('authorUID:', authorUID); } catch (error) { console.error('读取board文档出错:', error); }
按照上面的步骤排查,应该很快就能找到问题所在啦!
备注:内容来源于stack exchange,提问作者송영준

