express重定向错误:无法在使用nodejs和mysql发送头之后设置头

g52tjvyc  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(295)

当此代码到达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()
});
qvsjd97n

qvsjd97n1#

问题是 res.end() 将在回调函数之前执行,因为它表示异步操作。所以基本上当执行到 return res.redirect('/user-form'); ,已发送响应。你可以移动 res.end() 在回调函数中。

相关问题