【问题标题】:Express redirect firebase can't set headers after they are sentExpress redirect firebase 发送后无法设置标头
【发布时间】:2017-11-14 19:06:14
【问题描述】:

我正在为我的数据库使用 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'); 
    });

【问题讨论】:

  • 嘿,res.redirect('checkin'); 这个语句不能进入 for 循环。或者你可以尝试从那里返回。
  • 嗨,谢谢,但我把它放在那里的原因是因为我将快照的值存储到会话中(我在这里省略了)。如果我将重定向语句移出,那么会话将不会存储我不知道为什么的任何内容......但这有关系吗,因为一旦 if 语句完成,我就会跳出循环?
  • 我们需要看到你的遗漏。您可能需要参考此内容以更好地了解错误stackoverflow.com/a/7086621/6165688 的原因我猜您正在尝试将某些内容存储在 req.session 中的错误位置
  • @divsingh 我已相应地编辑并添加了我的完整代码
  • @user8806671 我可以看到您不再有 if 子句。您想设置会话中的所有快照吗?如果是这样,那么你做的不对。

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


【解决方案1】:

重定向应该移到 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 子句如何,这都会重定向到“checkin”,所以这取决于你的场景,当 if 子句甚至一次都不为真时,你是否要重定向到其他页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 2017-08-11
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-03-03
    相关资源
    最近更新 更多