web-dev-qa-db-ja.com

Cloud FunctionからCloud Firestoreにアクセスするにはどうすればよいですか?

Cloud Firestoreからデータを取得して、最終的にGraphQLサーバーで使用しようとしていますが、今のところ、テストするためにJSONを返しています。次のコードを使用してFirestoreにアクセスしていますが、データが返されないようです。 「start test」と「final test Push」がJSONレスポンスで期待どおりに表示されているので、関数が正しく機能することはわかっています。

Admin SDKの手順も試しましたが、役に立ちませんでした。誰かが私がここで間違っていることを発見できますか?

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

どうもありがとう!

編集:これは別のゲッターファイルからのものであることに注意する必要があります。 Cloud Function自体は別の場所にあり、適切に機能しています。

編集#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)
10
Nico

次のようにコードを変更してみてください。スナップショットデータは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" })
        })

参考のために、 link を確認してください

6
HakanC