问题描述
在我的程序中,如果输入了某种错误的详细信息,我试图使服务器将用户重定向到其他页面。我遇到的主要问题是,每当我尝试使用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.redirect
或res.render
。两者都设置状态并将其和一些信息返回给客户端。如果仅在重定向到它时,某些Express路由处理程序(使用res.render("start",{already_taken});
进行渲染)就处理了“ / start”。