【问题标题】:Get document data from Firebase Firestore in Node JS从 Node JS 中的 Firebase Firestore 获取文档数据
【发布时间】:2022-02-11 04:18:37
【问题描述】:

在网上没有找到任何东西后,我决定在这里写。我需要在 Node JS 中获取 /user/uid 集合中的所有文档。当我使用 Firebase 代码时,它会这样回复:

Promise {<pending>}

请帮帮我!

PS:我不想使用 Firebase Admin SDK 并等待。

“完整”代码

var express = require('express');

const { initializeApp } = require("firebase/app");
const { getDatabase, ref, get, child, set, onValue} = require("firebase/database");
const { getFirestore, collection, getDoc, doc} = require("firebase/firestore");

const firebaseApp = initializeApp(firebaseConfig);

// Get a reference to the database service

var app = express();

const PORT = process.env.PORT || 5050

app.get('/', (req, res) => {
    res.send('This is my demo project')
});

const db = getDatabase();
const firestore = getFirestore();


const document = getDoc(doc(collection(firestore, 'users'), "BW5kylV6rtZXtYibpKGc2m1asRm1"));
  
console.log(document);

//Response: "Promise {<pending>}""

【问题讨论】:

    标签: javascript node.js database firebase google-cloud-firestore


    【解决方案1】:

    Firebase 方法调用是异步的。因此,对于 Admin SDK 或 JS SDK,您必须处理异步性,要么使用then,要么使用async/await

    如果你收到Promise {&lt;pending&gt;},那是因为异步方法getDoc返回了Promise,而这个promise没有实现,但仍然处于等待状态。

    因此,您需要深入了解如何使用 Promises... 或 async/await 关键字的文档。

    在您的情况下,以下方法可以解决问题:

    getDoc(doc(collection(firestore, 'users'), "BW5kylV6rtZXtYibpKGc2m1asRm1"))
    .then(snap => {
       console.log(snap.data())
    })
    

    但是,如果您编写此代码是为了在您拥有的 Node 服务器上运行,我建议您使用 Admin SDK。

    【讨论】:

    • 感谢您的及时回复!你给我的代码有效。我想问你最后一件事,为什么你建议我使用 Admin SDK,保持凭据同样安全?我必须在 Firestore 和 Realtime DB 上执行大部分只读操作。非常感谢
    • 很高兴能为您提供帮助。为了回答你的问题,我有一个问题:你提到你使用 Node.js。你的代码在哪里运行?在您拥有的服务器上?
    • 我需要构建从数据库中获取值的 API。现在我在本地托管它。
    • 好的,你也可以使用一个或多个Cloud Functions。无论如何,无论您使用自己的服务器还是 Cloud Fucntion,在这种情况下推荐的 SDK 是 Admin SDK。有关详细信息,请参阅here
    • 好的,非常感谢
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多