【问题标题】:Reading data from Firebase with Node/Express使用 Node/Express 从 Firebase 读取数据
【发布时间】:2017-02-07 03:48:01
【问题描述】:

我是 Node.JS/Express 世界的初学者,所以我在这里寻求一些帮助,如何完成我想要的。

我有这个中间件,我正在从 Firebase 的数据库中读取数据,并将这些数据推送到对象数组中。我的问题是:我什么时候可以使用 res.render 来渲染视图并发送数据?因为我总是收到“发送后无法设置标头”错误,而且我知道原因,我只是想不出解决这个问题的最佳方法。

exports.regulation = (req, res, next) => {
    const collisions = [];
    const collisionsRef = firebase.database().ref('/collisions').once('value').then((data) => {
        data.forEach((elem) => {
            // console.log(elem.val());
            const collision = {};
            collision.id = elem.getKey();
            collision.userId = elem.val().userId;

            const userRef = firebase.database().ref('/users/' + elem.val().userId).once('value').then((user) => {
                collision.user = user.val().name;
                collision.status = elem.val().status;
                collision.timestamp = elem.val().timestamp;

                collisions.push(collision);
                // console.log(collisions.length);
            }).catch((err) => {
                // next(err);
            });
        });

        // res.render('regulation', {collisions: collisions});    
    });
};

谢谢! :)

【问题讨论】:

    标签: node.js express firebase firebase-realtime-database


    【解决方案1】:

    对 firebase 和 res.render 函数的请求将同步运行。 Async.js library series function 可用于同步运行函数。

    const collisions = [];
    function getData(callback) {
    
       const collisionsRef = firebase.database().ref('/collisions').once('value').then((data) => {
        data.forEach((elem) => {
            // console.log(elem.val());
            const collision = {};
            collision.id = elem.getKey();
            collision.userId = elem.val().userId;
    
            const userRef = firebase.database().ref('/users/' + elem.val().userId).once('value').then((user) => {
                collision.user = user.val().name;
                collision.status = elem.val().status;
                collision.timestamp = elem.val().timestamp;
    
                collisions.push(collision);
                // console.log(collisions.length);
            }).catch((err) => {
                // next(err);
            });
        });
        callback(null, 'one'); 
    }
    
    async.series([
        getData,
        function(callback) {
            res.render('regulation', {collisions: collisions});
            callback(null, 'two');
        }
    ]);
    

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 2020-04-22
      • 2023-03-31
      • 2020-03-17
      • 2019-05-20
      • 1970-01-01
      • 2020-07-01
      • 2018-04-11
      相关资源
      最近更新 更多