Отправить данные из пожарного магазина в nodejs на ajax вызов на клиенте - PullRequest
0 голосов
/ 10 марта 2020

Итак, у меня есть nodejs сайт. На моей клиентской стороне javascript у меня есть вызов ajax, когда я пытаюсь получить данные из своей базы данных firestore.

Однако я не могу найти способ отправить данные, полученные из базы данных firestore, в клиент, потому что он заблокирован в обещании.

То, что у меня сейчас есть на стороне сервера, это

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, который может позволить мне отправить данные обратно на сторону клиента.

Спасибо

1 Ответ

1 голос
/ 11 марта 2020

Метод 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');
    });


});
...