错误 [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.redirect
或 res.render
。两者都设置状态和 returns 它以及一些信息给客户。如果 '/start' 由某些 Express 路由处理程序(使用 res.render("start", {already_taken});
呈现)处理,而只是重定向到它,仅此而已。
在我的程序中,如果输入了某种错误的详细信息,我试图让服务器将用户重定向到另一个页面。我遇到的主要问题是每当我尝试使用 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.redirect
或 res.render
。两者都设置状态和 returns 它以及一些信息给客户。如果 '/start' 由某些 Express 路由处理程序(使用 res.render("start", {already_taken});
呈现)处理,而只是重定向到它,仅此而已。