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

Posted

技术标签:

【中文标题】错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头。无法重定向与应有的页面不同的页面【英文标题】: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 【发布时间】:2020-12-24 09:29:43 【问题描述】:

在我的程序中,如果输入了某种错误的详细信息,我试图让服务器将用户重定向到不同的页面。我遇到的主要问题是每当我尝试使用 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.renderres.redirect @aRvi 这就是问题所在。我曾尝试单独使用res.render("start", already_taken);,但这只是将用户重定向到个人资料页面,在这种情况下不应该发生这种情况。当我刚刚使用res.redirect("/start"); 时,我收到一个错误返回,说Cannot GET /start 直接在网页上 您是否尝试过评论它res.redirect("/start"); 因为没有 /start 的 API 来处理该请求 @aRvi 评论它是什么意思(评论出来?) 删除那行代码或评论它// res.redirect("/start"); 【参考方案1】:

您可以致电res.redirectres.render。两者都设置状态并将其和一些信息返回给客户端。如果 '/start' 由某个 Express 路由处理程序(使用 res.render("start", already_taken); 渲染)处理,则只需重定向到它即可。

【讨论】:

这就是问题所在。我曾尝试单独使用res.render("start", already_taken);,但这只是将用户重定向到个人资料页面,在这种情况下不应该发生这种情况。当我刚刚使用res.redirect("/start"); 时,我收到一个错误返回,说Cannot GET /start 直接在网页上

以上是关于错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头。无法重定向与应有的页面不同的页面的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”错误?

错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法删除标头

Express.js 中的新 Mongoose Schema `ERR_HTTP_HEADERS_SENT` 错误

Firebase - Node.js - Express - 错误 [ERR_HTTP_HEADERS_SENT]

错误 [ERR_HTTP_HEADERS_SENT] 在将标头发送到客户端后无法设置标头

错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头