快速redirect不会改变req.url

我有一个成功login后redirect的路由

app.post('/login', function(req, res){ if(req.body.password === Server.cfg.auth.userPass) { req.session.user = {nick: req.body.username, pass: req.body.password} res.redirect('/chat') } else { res.render('user/login', { locals: { error: 'Invalid password' } }) } }) 

redirect似乎工作,因为页面刷新正确呈现的玉文件。 然而,url仍然说/login和我的pageTitlevariables(通过模板variables设置)也不会改变。 如果在redirect之后刷新页面,则所有内容都会更改为应该的方式。 只有在redirect之后,它才会改变。

对于试图处理来自服务器控制的开发背景的ajaxredirect的人来说,这已经是一个相当普遍的混淆了。 我的例子显示,如果授权失败会发生什么,稍有不同; 但是您可以使用拦截响应和检查状态等相同的概念,并让客户端JavaScript执行redirect。

我的客户端代码实际上是一个骨干模型,但反过来调用jquery的ajax,如:

 model.save({ error:function... 

服务器

 function requiresLogin(req, res, next) { if(req.session.user) { next(); } else { //res.redirect('/sessions/new?redir=' + req.url); // won't work res.send("Unauthorized", 403); // send 403 http status } } 

客户

  // Assumes you can get http status from response error: function(resp, status, xhr)... if(resp.status === 403) { window.location = '/sessions/new'; // optionally put a redirLastPage=somewhere } 

这符合我的需要。 我也build议谷歌search引擎redirect后,看看为什么这个

看起来这是一个jQuery问题。 至less这是给我的。 你可以用rel = external来覆盖它。 有关详情,请访问http://jquerymobile.com/demos/1.1.0/docs/pages/page-navmodel.html