来自POST的res.redirect

出于某种原因,我无法redirect到/博客,一旦我的login完成。 在我的login控制器中,我有以下。

module.exports = { post: function(req, res) { var login = req.body['login']; if (login && req.body['login']['password'] == "password") { console.log('Granted access'); res.send({redirect: '/blog'}); } else { console.log('wrong password'); res.redirect('back'); } } }; 

jquery ajax

 $(document).ready -> $('#login-button').click () -> $.ajax url: '/login' type: 'POST' data: $('#Password').serialize() dataType: 'json' success: (data, textStatus, jqXHR) -> if typeof data.redirect == 'string' window.location = data.redirect 

更新为工作代码

在AJAX之后你不能redirect。 你需要在Javascript中自己做。

服务器

 post: function(req, res) { var login = req.body['login']; app.use(express.bodyParser()); if (login && req.body['login']['password'] == "tom") { var loginPassword = req.body['login']['password']; console.log(loginPassword); console.log('Granted access'); res.send({redirect: '/blog'}); } ... } 

客户

 $(document).ready -> $('#login-button').click () -> $.ajax url: '/login' type: 'POST' data: $('#Password').serialize() dataType: 'json' success: (data, textStatus, jqXHR) -> if typeof data.redirect == 'string' window.location = data.redirect 

这应该工作。

POST被redirect到GET。 您不能将POSTredirect到POST; 你可以转发它,但这将是奇怪的。 我build议添加逻辑到您的GET路线,将处理login与未login的用户。

此外,304可能意味着您的浏览器caching了您的响应,因为您使用了301(永久性redirect,login非常糟糕;使用302)。

你正在失去return

 return res.redirect('/');