Res.redirect from POST
По какой-то причине я не могу переадресовать/блог, как только мой логин будет завершен. В моем контроллере входа я имею следующее.
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
обновленный рабочий код
Ответы
Ответ 1
Вы не можете выполнить перенаправление после AJAX. Вам нужно сделать это самостоятельно в 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
Это должно работать.
Ответ 2
POST перенаправляются на GET. Вы не можете перенаправлять POST на POST; вы можете направить его, но это было бы странно. Я рекомендую добавить логику к вашему маршруту GET, который будет обрабатывать зарегистрированный пользователь или не зарегистрированный пользователь.
Кроме того, 304, вероятно, означает, что ваш ответ кэшируется вашим браузером, потому что вы использовали 301 (постоянная переадресация, очень плохо при входе и т.д., используйте 302).
Ответ 3
Вам не хватает return
:
return res.redirect('/');