我只写了两个类似的代码,但是只有材料可以运行,并且订单提交时出现错误“ [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;
答案 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;