当此代码到达 catch 函数内的重定向行时。我收到错误
Can't set header after they are sent
在 try 函数中,它会检查数据库中是否存在电子邮件,一旦运行,它将获取用户电子邮件并将其分配给数据库中的集群表。
问题是当电子邮件不存在时,我尝试将其重定向到注册表 html 模板 -> res.redirect("/") 但它不允许我
我看到很多人说使用 return 可以轻松解决问题,但我尝试过 return res.redirect("/") 但没有成功。
router.post("/get-user-cluster", (req, res) => {
const email = req.body.check_email;
var retrievedEmail;
var availCluster;
const queryEmail = 'SELECT * FROM users WHERE email = ?';
const queryAvailableCluster = 'SELECT * FROM clusters WHERE clusters_email IS NULL LIMIT 1';
const querySetEmailCluster = "UPDATE clusters SET clusters_email = ? WHERE id = ? ";
getConnection().query(queryEmail, [email], (err, data, fields) => {
try {
if (err) {
console.log("Failed to query for user email: " + err)
return
}
retrievedEmail = data[0].email;
getConnection().query(queryAvailableCluster, (err, data, fields) => {
if (err) {
console.log("Failed to query for available cluster: " + err)
return
}
availCluster = data[0].id;
getConnection().query(querySetEmailCluster, [retrievedEmail, availCluster], (err, data, fields) => {
if (err) {
console.log("Failed to query for assigning user email to available cluster: " + err)
return
}
});
});
}
catch(err) {
console.log('catch');
return res.redirect('/user-form');
}
})
res.end()
});
最佳答案
问题是 res.end()
将在回调函数之前执行,因为它呈现异步操作。因此基本上当执行到达return res.redirect('/user-form');
时,响应已经发送。您可以将 res.end()
移至回调函数内。
关于mysql - 快速重定向错误 : can't set headers after they are sent using NodeJS and MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53906244/