节点js [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设置标头

时间:2019-12-07 06:49:43

标签: node.js

我只写了两个类似的代码,但是只有材料可以运行,并且订单提交时出现错误“ [ERR_HTTP_HEADERS_SENT]:将标头发送给客户端后无法设置标头”

order.js

pool.getConnection(function(err,connection){
            connection.query('SELECT customerid FROM order_table WHERE customerid =?', [customerid],function(err,rows){
                if(err){
                    res.render('error',{
                        message:err.message,
                        error:err
                    });
                }
         /*
            if(rows.length>=1){
                res.render('operation/order',{warn:"You have already order!"});  

            }else{
                */   
                    var cmd="INSERT INTO order_table(customerid,customerName,phonenumber,productid,amount,orderday,deadlineday) VALUES(?,?,?,?,?,?,?)";
                        connection.query(cmd,[customerid,customerName,phonenumber,productid,amount,orderday,deadlineday],function(err,result){
                            console.log(req.body);
                            if(err){
                                res.redirect('/order');
                            //return next();
                            }else{
                                res.render('operation/order_redirect');
                            }
                    });
            //}
            });

        });
    //callback(err, result);
    connection.release();
});

module.exports=router;  

2 个答案:

答案 0 :(得分:0)

  

当您尝试发送响应但已发送时出现错误。

如我所见,发生错误时您尚未返回状态。因此,使用return返回状态,以使下面的代码不执行。

if(err){
   return res.render('error',{
         message:err.message,
         error:err
    });
}
  

为什么会发生此错误:


错误“错误:发送标头后无法设置标头”。表示您已经处于“正文”或“完成”状态,但是某些函数试图设置标头或statusCode。 (Find more


答案 1 :(得分:0)

您的if块中捕获了一个错误,但是您的if块没有else块,因此后面紧跟if块的代码始终执行是否发生错误。因此,执行res.render并将响应发送到客户端,在设置调用redirect标头之后和之后立即执行其余代码,而在发送响应后您将无法执行此操作给客户。

只需将else添加到其余代码中,如下所示:

pool.getConnection(function(err,connection){
            connection.query('SELECT customerid FROM order_table WHERE customerid =?', [customerid],function(err,rows){
                if(err){
                    res.render('error',{
                        message:err.message,
                        error:err
                    });
                }
                else {
                    var cmd="INSERT INTO order_table(customerid,customerName,phonenumber,productid,amount,orderday,deadlineday) VALUES(?,?,?,?,?,?,?)";
                        connection.query(cmd,[customerid,customerName,phonenumber,productid,amount,orderday,deadlineday],function(err,result){
                            console.log(req.body);
                            if(err){
                                res.redirect('/order');
                            //return next();
                            }else{
                                res.render('operation/order_redirect');
                            }
                    });
            }
            });

        });
    //callback(err, result);
    connection.release();
});

module.exports = router;