【问题标题】:How to get data from snapshot.forEach loop and return through an get route如何从 snapshot.forEach 循环中获取数据并通过 get 路由返回
【发布时间】:2020-04-22 21:52:35
【问题描述】:

我是 firebase 的新手,对 node.js 做了一些工作。基本上我想要的是从我的集合“咖啡”中检索数据并通过我的 /test 路由发送它,这样我就可以在我的前端使用它。不知道怎么退货。

通过将 return 放入 forEach 循环,我已经让它返回第一个索引而不是列表的其余部分。但我想要完整的列表。

//test route for database 
router.get("/test", (req, res) =>{
  // For loop goes thorugh our collection list and displays them in log. 
  db.collection('coffee').get().then((snapshot) => {
    let getCoffee = snapshot.forEach((doc) => {
      //console.log(doc.data());  
      const dataArray = [];
      dataArray.push(doc.data());
      console.log(dataArray);
    });
    return res.json(getCoffee);

  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });


});

修改后:


router.get("/test", (req, res) =>{    
  // For loop goes thorugh our collection list and displays them in log. 
  db.collection('coffee').get().then((snapshot) => {
    let getCoffee = snapshot.map((doc) => {
      return doc.data();
    });

    return res.json(getCoffee);

  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });


});


console.log(snapshot) 给了我以下信息:

集合参考 { _firestore: 火库{ _settings:[对象], _settingsFrozen:真, _serializer:[序列化器], _projectId: 'test-3ad87', 注册的ListenersCount:0, _lastSuccessfulRequest: 1587563014339, _backoffSettings:[对象], _preferTransactions:假, _clientPool: [ClientPool] }, _queryOptions: 查询选项 { 父路径:[资源路径], collectionId: '咖啡', 转换器:[对象], 所有后代:假, 字段过滤器:[], 字段订单:[], startAt:未定义, endAt:未定义, 限制:未定义, 限制类型:未定义, 偏移量:未定义, 投影:未定义}, _serializer: 序列化器 { createReference: [Function] } }, _readTime: 时间戳 { _seconds: 1587563014, _nanoseconds: 390810000 }, _size: 12,

【问题讨论】:

    标签: node.js firebase express google-cloud-firestore


    【解决方案1】:
    let getCoffee = snapshot.docs.map((doc) => {
    
          return doc.data();
    });
    return res.json(getCoffee);
    

    【讨论】:

    • 您能详细说明一下吗?我尝试删除并粘贴它,但得到:获取文档时出错 TypeError:snapshot.map is not a function
    • 能否请您发布快照数据结构。
    • console.log(snapshot) 并发布数据
    • 是的,然后呢?
    • snapshot 变量是一个QuerySnapshot object,它确实有一个forEach 方法,但没有map 方法。您将需要使用 snapshot.docs.map(...) 来遍历所有文档。
    【解决方案2】:

    您的快照在 'then' 和 'catch' 块中运行。问题是您的外部 get 方法在内部承诺完成之前很久就完成了。确保返回 Promise 的结果,而不仅仅是运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多