首页 > 解决方案 > 从nodejs中的firestore发送数据到客户端的ajax调用

问题描述

所以我有一个 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 读取的方法可以让我将数据发送回客户端。

谢谢

标签: node.jsfirebasepromisegoogle-cloud-firestore

解决方案


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');
    });


});

推荐阅读