在app.post函数结束时,我试图将用户重定向到另一个页面(总是在“massChangesSubmitted”页面上结束)。当它遇到Error: Can't set headers after they are sent.
行时,我会收到错误return res.redirect('/mass_changes')
。代码的SQL部分工作得很好,唯一失败的是重定向。
我不能为我的生活弄清楚为什么会这样。我在网上找到的所有内容都说res.redirect行应该可行。请帮忙!
发布代码
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();
});
};
答案 0 :(得分:1)
您在拨打
时已关闭连接 res.status(200).end();
res.end()结束连接,因此您需要将其删除。而且正如评论中所提到的,res.redat 200可能不需要res.redat。
如果您确实需要发送200,那么您可以在重定向中指定任何有效的https状态代码。
res.redirect(200, '/mass_changes');