微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ExpressJS:res.redirect不能按预期工作?

如何解决ExpressJS:res.redirect不能按预期工作?

问题可能不在于后端,而在于前端。如果您使用AJAX发送POST请求,则它是专门为不更改您的URL而设计的。

使用window.location.hrefAJAX的请求后,已经完成(在.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无法正常工作。我知道它确实到达了“ /”路线,因为:

  1. 我可以在Node控制台中看到“我们在这里:root”
  2. 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 举报,一经查实,本站将立刻删除。