如何解决ExpressJS:res.redirect不能按预期工作?
问题可能不在于后端,而在于前端。如果您使用AJAX发送POST请求,则它是专门为不更改您的URL而设计的。
使用window.location.href
AJAX的请求后,已经完成(在.done()
)与所需的路径更新URL,或使用JQuery:$('body').replaceWith(data)
当您收到请求的HTML回来。
解决方法
我已经为此奋斗了2天,尽我所能用Google搜索和stackoverflow,但是我无法解决。
我正在构建一个简单的节点应用程序(+ Express + Mongoose),其登录页面重定向到主页。这是我的服务器JS代码:
app
.get('/',(req,res) => {
console.log("Here we are : root");
return res.sendfile(__dirname + '/index.html');
})
.get('/login',res) => {
console.log("Here we are : '/login'");
return res.sendfile(__dirname + '/login.html');
})
.post('/credentials',res) => {
console.log("Here we are : '/credentials'");
// Some Mongoose / DB validations
return res.redirect('/');
});
登录页面向发出POST请求/credentials
,在此验证发布的数据。这可行。我可以在Node控制台中看到“我们在这里:’/
credentials’”。
然后是问题:res.redirect无法正常工作。我知道它确实到达了“ /”路线,因为:
- 我可以在Node控制台中看到“我们在这里:root”
- index.html页面作为响应被发送回浏览器,但未显示在窗口中。 Chrome检查器显示POST请求响应,我可以在检查器中看到HTML代码正在发送到浏览器,但是URL仍然是/ login并且登录页面仍在屏幕上显示。
(编辑)重定向位于Mongoose的回调函数中,它不是同步的(NodeJS应该是同步的)。为了清楚起见,我刚刚删除了Mongoose验证内容。
我尝试添加res.end()
,但是不起作用
我努力了
req.method = 'get';
res.redirect('/');
和
res.writeHead(302,{location: '/'});
res.end();
不起作用
我究竟做错了什么?我如何才能真正离开“ /登录”页面,将浏览器重定向到“ /”并显示其收到的HTML代码?
预先感谢您一百万的帮助:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。