我正在尝试从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成功调用的内存,作为更复杂端点的概念证明。任何帮助将不胜感激。
答案 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")
}
})