Firebase 如何从云功能访问云Firestore?
我试图从我的云Firestore中检索数据,最终用于GraphQL服务器,但现在我只是返回JSON进行测试。我正在使用下面的代码访问Firestore,但似乎没有返回任何数据。我知道该函数工作正常,因为“开始测试”和“最终测试推送”在JSON响应中如预期的那样出现 我也尝试过使用ADMINSDK说明,但没有效果。有人能看出我做错了什么吗Firebase 如何从云功能访问云Firestore?,firebase,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Functions,Google Cloud Firestore,我试图从我的云Firestore中检索数据,最终用于GraphQL服务器,但现在我只是返回JSON进行测试。我正在使用下面的代码访问Firestore,但似乎没有返回任何数据。我知道该函数工作正常,因为“开始测试”和“最终测试推送”在JSON响应中如预期的那样出现 我也尝试过使用ADMINSDK说明,但没有效果。有人能看出我做错了什么吗 import * as admin from "firebase-admin" import * as functions from "firebase-fun
import * as admin from "firebase-admin"
import * as functions from "firebase-functions"
admin.initializeApp(functions.config().firebase)
const db = admin.firestore()
const authors = [{ key: "start test" }]
db.collection("authors")
.get()
.then(snapshot => {
snapshot.forEach(doc => {
const data = {
id: doc.id,
firstName: doc.firstName,
lastName: doc.lastName
}
authors.push(data)
authors.push({ key: "test in loop" })
})
})
authors.push({ key: "final test push" })
export default authors
非常感谢
编辑:我应该注意,这是一个单独的getter文件。云功能本身在别处,并且工作正常
编辑#2:云函数定义
import authorsArray from "./firestore"
const testServer = express()
testServer.get("*", (req, res) => {
res.setHeader("Content-Type", "application/json")
res.send(JSON.stringify({ data: authorsArray }))
})
const test = https.onRequest(testServer)
尝试更改代码,如下所示;因为快照数据是
doc.data()
,id是doc.id
db.collection("authors")
.get()
.then(snapshot => {
snapshot.forEach(doc => {
const data = {
id: doc.id,
firstName: doc.data().firstName,
lastName: doc.data().lastName
}
authors.push(data)
authors.push({ key: "test in loop" })
})
请查看我在这里没有看到云函数定义,以供参考。你不能只是将任意代码推送到云函数执行——你必须声明一个触发器,它定义了函数应该执行的时间。这是你
index.js
文件的全部内容吗?对不起,我应该更清楚一点:这是一个单独的getter文件。云函数本身是在其他地方定义的,运行良好。谢谢!它现在正在工作,但只在硬刷新后的第二次加载上工作。Firestore的数据也出现在“最终测试推送”之后。我猜这是因为异步获取?是的,没错。:)如何让它在返回响应之前等待数据?我不确定在哪里添加async/await,无论是在getter文件中还是在云函数本身(添加到主帖子中),我认为如果您向上移动最后一行。它将等待每个循环。或者您可以使用以下选项检查计数nr:snapshot.forEach((doc,countnr)=>…
仍然存在相同的问题,需要进行几次刷新才能将Firestore数据包含在结果中..:(