当此代码到达catch函数内的重定向行时。我出错了
发送后无法设置标题
在try函数中,它检查数据库中是否存在电子邮件,一旦运行,它将接收用户电子邮件并将其分配给数据库中的一个clusters表。
问题是当电子邮件不存在时,我尝试将它重定向到注册表表单html template->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()
});
1条答案
按热度按时间qvsjd97n1#
问题是
res.end()
将在回调函数之前执行,因为它表示异步操作。所以基本上当执行到return res.redirect('/user-form');
,已发送响应。你可以移动res.end()
在回调函数中。