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

问题描述

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

我不确定我是在错误地将网页存储在计算机上的情况下引用网页,还是提到了有关http标头的其他内容

以下是我的代码,可能可能有助于显示错误的地方:

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});
            }
        });
    }

因此,另一页上的表单发布了对profile.html页的请求。然后检查某些内容以检测用户名是否正在登录或正在注册。发送的数据发生SQL查询。如果该用户已经存在,则该用户将被转到页面,该页面将使他们尝试再次注册。其中包含res.redirect问题:

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

解决方法

您致电res.redirectres.render。两者都设置状态并将其和一些信息返回给客户端。如果仅在重定向到它时,某些Express路由处理程序(使用res.render("start",{already_taken});进行渲染)就处理了“ / start”。