【问题标题】:Send Data from firestore in nodejs to ajax call on client从nodejs中的firestore发送数据到客户端的ajax调用
【发布时间】:2020-06-22 14:50:34
【问题描述】:

所以我有一个 nodejs 网站。在我的客户端 javascript 中,我有一个 ajax 调用,我试图从我的 firestore 数据库接收数据。

但是我想不出一种方法将从 firestore db 检索到的数据发送到客户端,因为它被锁定在一个承诺中。

我目前在服务器端拥有的是

app.get("/updateCalendar", (req, res) => {
    userId = req.query.userId;
    let eventCount = 0;
    let documents = {};
    let eventsRef = db.collection("Events");
    let query = eventsRef.where("userId", '==', 1).get()
    .then(snapshot => {
        let documents = {};
        if(snapshot.empty) {
            console.log("No events");
            return;
        }
        snapshot.forEach(doc => {
            documents[eventCount] = doc.data();
            eventCount++;
        });
        return documents;
    })
    .catch(err => {
        return err;
    });

    res.json(query)
});

无论如何,我可以将数据从承诺中返回到客户端吗?或者,是否有另一种从 Firestore 读取数据的方法,可以让我将数据发送回客户端。

谢谢

【问题讨论】:

  • 您应该共享更多代码,尤其是响应 ajax 调用的 node.js 代码。你如何实现它(独立于 Firestore 部分)?换句话说,让我们假设您想要发回不在“Promise 中”的数据,比如一个简单的常量值。您将如何在您的环境中做到这一点?
  • 即99%的nodejs代码对应ajax调用。
  • 我对其进行了编辑以显示用于 ajax 调用的节点 js 端点的所有代码
  • 那么snapshot 及其.empty 属性和.forEach() 方法是什么?
  • doc.data() 返回什么?

标签: node.js firebase promise google-cloud-firestore


【解决方案1】:

get() 方法是异步的,并返回一个 Promise,该方法使用相应的 QuerySnapshot 进行解析。

所以你应该在then()方法中返回数据,如下:

app.get("/updateCalendar", (req, res) => {
    userId = req.query.userId;
    let eventCount = 0;
    let documents = {};
    let eventsRef = db.collection("Events");
    let query = eventsRef.where("userId", '==', 1).get()
    .then(snapshot => {
        let documents = {};
        if(snapshot.empty) {
            console.log("No events");
             throw new Error("No events");
        }
        snapshot.forEach(doc => {
            documents[eventCount] = doc.data();
            eventCount++;
        });
        res.json(documents);
    })
    .catch(err => {
        res.status(500).send('Error');
    });


});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 2022-01-12
    • 2020-03-08
    • 2017-08-15
    • 2020-08-17
    • 2015-03-05
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多