来自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('/');