Firestore在创建后获取文档

时间:2020-04-10 14:21:11

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

我正在尝试从Mongo迁移到FireStore。我试图使我的API保持一致。我在弄清楚如何获取FireStore中刚刚创建(添加到集合)中的文档时遇到了麻烦。这是我所拥有的:

loginRouter.route("/create/:email").post((req, res) => {
  const email = req.params.email
  const returning = req.query.returning || false
  if (email) {
    loginsRef.add({
      email,
      loginDate: new Date(),
      returning
    })
      .then(snapshot => {
        loginsRef.get(snapshot.id).then(login => {
          console.log(login.id)
          res.status(200).send(login)
        }).catch(err => {
          console.log(err)
          res.status(204)
        })

      })
      .catch(err => {
        serverLogger({ route: "api/logins/create", message: err })
        res.status(500).send("Trouble creating login")
      })
  } else {
    serverLogger({ route: "api/logins/create", message: "No email" })
    res.status(400).send("Please include an email")
  }
})

此代码将在FireStore中成功创建登录文档并返回文档参考ID。然后,我想从FireStore中检索该完整对象,我知道您不能在create调用中执行此操作。现在,第二个调用返回一个undefined。我期望在get调用中收到完整的文档。我希望这来自数据库,而不仅仅是来自基于FireStore成功调用的内存,作为更复杂端点的概念证明。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我想回圈并发布我的工作代码。感谢您对道格的帮助!我对FireStore方法不了解的是,必须要做“ collection.DOC(ID).get”,而不仅仅是“ collection.get(ID)”。这是一条很好的学习曲线,可以帮助您了解需要深入到数据库的下一个级别才能获得单个文档。集合将始终返回所有文档。

  const email = req.params.email
  const returning = req.query.returning || false
  if (email) {
    loginsRef.add({
      email,
      loginDate: new Date(),
      returning
    })
      .then(docRef => {
        loginsRef.doc(docRef.id).get().then(login => {
          res.status(200).send(login.data())
        }).catch(err => {
          res.status(204)
        })

      })
      .catch(err => {
        serverLogger({ route: "api/logins/create", message: err })
        res.status(500).send("Trouble creating login")
      })
  } else {
    serverLogger({ route: "api/logins/create", message: "No email" })
    res.status(400).send("Please include an email")
  }
})
相关问题