NodeJS无法在res.redirect上设置标头错误

时间:2017-09-18 16:26:02

标签: node.js redirect

在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();
     });
 };

1 个答案:

答案 0 :(得分:1)

您在拨打

时已关闭连接
  res.status(200).end();

res.end()结束连接,因此您需要将其删除。而且正如评论中所提到的,res.redat 200可能不需要res.redat。

如果您确实需要发送200,那么您可以在重定向中指定任何有效的https状态代码。

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