错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置 headers。无法重定向与预期不同的页面

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client. Unable to redirect different page than what it is supposed to be

在我的程序中,如果输入了某种错误的详细信息,我试图让服务器将用户重定向到另一个页面。我遇到的主要问题是每当我尝试使用 res.redirect() 将另一个网页作为参数我得到以下错误:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我不确定我引用的网页是否在我计算机上的存储位置有误,但提到了有关 http headers 的其他内容。

这是我的代码,可能有助于显示问题所在:

app.post("/profile.html", (req, res)=>
{

    if(req.body.login_name == undefined)
    {
        var sql = "SELECT * FROM connectfour.players WHERE username =" + "'" + req.body.signup_name + "';";
        connection.query(sql, function(error, results)
        {
            if(error) throw error;


            if(results.length > 0)
            {
                console.log(res);
                res.redirect("/start");
                var already_taken = "username " + req.body.signup_name + " is already taken";
                res.render("start", {already_taken});
            }
            else
            {
                var signup_name = req.signup_name;
                res.render("profile", {signup_name});
            }
        });
    }

所以另一个页面上的表单 post 是对 profile.html 页面的请求。然后检查一些东西来检测用户名是否正在登录或注册。发送过来的数据会发生 SQL 查询。如果用户已经存在,那么用户将被转到一个页面,让他们再次尝试注册。这包含 res.redirect 问题:

profile.ejs 是请求的页面应该是什么。但是如果提到 if(results.length > 0) 的 if 语句发生,我需要将它重定向到 start.ejs。我会尝试 post 显示我的问题所在的图像,但问题是我的声誉不够高。

您可以呼叫 res.redirectres.render。两者都设置状态和 returns 它以及一些信息给客户。如果 '/start' 由某些 Express 路由处理程序(使用 res.render("start", {already_taken}); 呈现)处理,而只是重定向到它,仅此而已。