You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:33:16