2017-09-18 2 views
0

Am Ende einer app.post -Funktion versuche ich, Benutzer auf eine andere Seite umzuleiten (immer auf der "massChangesSubmitted" Seite endet). Ich bekomme den Fehler Error: Can't set headers after they are sent., wenn es die Zeile return res.redirect('/mass_changes') trifft. Der SQL-Abschnitt des Codes funktioniert großartig, das einzige, was fehlschlägt, ist die Umleitung.NodeJS kann keinen Header-Fehler bei res.redirect setzen

Ich kann nicht für das Leben von mir herauszufinden, warum das passiert. Alles, was ich online finde, sagt, dass die res.redirect-Leitung funktionieren sollte. Bitte helfen Sie!

Postleitzahl

app.post('/massChangesSubmitted', function(req, res){ 
    res.status(200).end(); 

    massChangesSubmitted(function(err){}); 
    return res.redirect('/mass_changes'); 
}); 

massChangesSubmitted Code

function massChangesSubmitted(callback) { 
    var sql = 'UPDATE mass_changes SET submitted=1, submitted_datetime=now() WHERE submitted=0'; 
    var dbh = mysql.createConnection(config.db["DB"]) 
    dbh.query(sql, function(err, rows) { 
        if(err) { 
            callback(-1); // call callback with error. 
        } else { 
            callback(1); // call callback function without error. 
            console.log("Existing Mass Changes considered submitted") 
        }; 
    dbh.end(); 
    }); 
}; 

Antwort

1

Sie die Verbindung geschlossen haben, wenn Sie

res.status(200).end(); 

genannt res.end() beendet die Verbindung, so dass Sie diese entfernen müssen. Und auch, wie in den Kommentaren erwähnt, wird res.status 200 möglicherweise nicht von einem res.redirect benötigt.

Wenn Sie wirklich 200 senden müssen, können Sie einen gültigen https-Statuscode in redirect angeben.

res.redirect(200, '/mass_changes'); 
+0

Das Setzen eines Status von 200 gefolgt von einer Weiterleitung, die ihren eigenen Status (302) setzt, ist ein wenig überflüssig. – robertklep

+0

hat es korrigiert. Vielleicht muss das OP 200 senden, um diese Alternative vorzuschlagen. –

+0

Ich bin mir ziemlich sicher, dass sie nur 'res.redirect ('/ mass_changes')' wollen. Eine Weiterleitung mit einem 200-Status ist keine Weiterleitung. – robertklep

Verwandte Themen