快速重定向firebase在发送后无法设置标头

时间:2017-11-14 05:12:43

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

我正在为我的数据库使用nodejs express和firebase。所以我要做的是根据用户的发布请求,更新firebase数据并将用户重定向到另一个页面。但我一直收到错误:发送后无法设置标头。

这是我在controller.js文件中的代码:

app.post('/carpark', urlencodedParser, function(req,res){
    req.session.carpark = req.body.carpark;  
lotsRef.orderByChild('CarparkName').equalTo(req.session.carpark).on('value', function(snapshot){
        for (var key in snapshot.val()) {
            if (snapshot.val()[key]['Availability'] == true) {
                firebase.database().ref('Lots/'+ key).update({'Availability': false });
                res.redirect('checkin');           
                break;
            }
        }
    });

编辑:

app.post('/carpark', urlencodedParser, function(req,res){
    req.session.carpark = req.body.carpark;
    lotsRef.orderByChild('CarparkName').equalTo(req.session.carpark).on('value', function(snapshot){
        for (var key in snapshot.val()) {
            var allocatedtime = new Date().getHours() + ':' + (new Date().getMinutes() <10 ? '0' : '') + new Date().getMinutes() + ':' + (new Date().getSeconds() <10 ?'0' : '') + new Date().getSeconds();
                req.session.key = key;
                req.session.LotID = snapshot.val()[key]['LotID'];
                req.session.AllocatedTime = allocatedtime;
                req.session.SerialNum = snapshot.val()[key]['SerialNumber'];
                var date = new Date().getFullYear() + "-" + (new Date().getMonth()+1) + "-" + new Date().getDate();
                req.session.DateAllocated = date;
                console.log(req.session);
                firebase.database().ref('Lots/'+ req.session.key).update({'Availability': false });
                break;
            }
        }
        res.redirect('checkin'); 
    });

1 个答案:

答案 0 :(得分:0)

重定向应该移到For循环外:

app.post('/carpark', urlencodedParser, function(req,res){
    req.session.carpark = req.body.carpark;  
lotsRef.orderByChild('CarparkName').equalTo(req.session.carpark).on('value', function(snapshot){
        for (var key in snapshot.val()) {
            if (snapshot.val()[key]['Availability'] == true) {
                firebase.database().ref('Lots/'+ key).update({'Availability': false });         
                break;
            }
        }
        res.redirect('checkin');  
    });

但是这会重定向到“检查”状态。不管你的if子句如何,所以这取决于你的场景,当if子句不为真时,你是否想要重定向到其他页面。