如何在Node.js中访问Firebase自动生成键对应的数据?
访问Firebase实时数据库自动生成键对应的数据
我在使用Firebase数据库和React/Node.js开发项目时,通过以下POST请求创建条目:
const res = await fetch(`${MYFIREBASE}/posts.json`, { method: "POST", body: JSON.stringify(post) });
随后用GET请求查询帖子:
const res = await fetch(`${MYFIREBASE}/posts.json`, { method: 'GET'}); const json = await res.json(); console.log(json)
得到的结果是带自动生成键的对象:
{ '-O5NIwGpZU_GNQb75BPS': { post: [ [Object], [Object], [Object] ], name: 'name1' }, '-O5NK_uGPJySPQo-ZmDF': { post: [ [Object], [Object] ], name: 'name2' } }
问题是如何访问这些自动生成键背后的数据,尝试json[0]无效,用Object.keys(json)又觉得是临时方案,不知道标准做法是什么。
解决方案
Firebase实时数据库通过POST创建数据时,会自动生成唯一键来组织列表数据,返回的键值对结构是标准格式,以下几种方法都是常规且推荐的处理方式:
1. 遍历键获取对应数据
用Object.keys()提取所有自动生成的键,再逐个访问对应的数据:
const res = await fetch(`${MYFIREBASE}/posts.json`, { method: 'GET'}); const json = await res.json(); Object.keys(json).forEach(key => { const postData = json[key]; console.log('用户名:', postData.name); console.log('帖子内容:', postData.post); });
2. 直接提取所有数据值
如果不需要用到自动生成的键,用Object.values()直接将对象转换为数据数组:
const res = await fetch(`${MYFIREBASE}/posts.json`, { method: 'GET'}); const json = await res.json(); const postsArray = Object.values(json); postsArray.forEach(postData => { console.log('用户名:', postData.name); console.log('帖子内容:', postData.post); });
3. 同时获取键和数据
如果需要保留自动生成的键(比如后续要更新/删除数据时用到),用Object.entries()获取键值对数组:
const res = await fetch(`${MYFIREBASE}/posts.json`, { method: 'GET'}); const json = await res.json(); const postEntries = Object.entries(json); postEntries.forEach(([key, postData]) => { console.log('自动生成键:', key); console.log('用户名:', postData.name); console.log('帖子内容:', postData.post); });
这些方法都是处理Firebase这种返回结构的标准方式,并非临时解决方案,完全可以放心使用。
内容的提问来源于stack exchange,提问作者Cristofer Villegas
相关产品推荐
相关产品推荐

