mysql - 快速重定向错误 : can't set headers after they are sent using NodeJS and MySQL

标签 mysql node.js

当此代码到达 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/

相关文章:

javascript - forEach 循环中的 NodeJs 函数需要在转到下一项之前完成

MySQL 错误 1064 - 此错误是什么原因?

php - 为什么 Laravel 5.6 中没有删除表中的用户

mysql - 如何使用sequelize处理MySQL中的用户状态

node.js - 如何使用 couchnode 设置 CouchBase 的过期时间

node.js - Google Speech-To-Text v2 不接受 Node.JS 中的音频

java - JPA更新多对多删除记录

并发数据插入中的mysql_insert_id问题

javascript - 如何使用nodejs请求库从客户端检测服务器关闭的连接

javascript - sqlite3 Node.js 数据库 Controller (this.dao.run 不是函数)