res.redirect от 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

обновлен до рабочего кода

3 ответа

Решение

Вы не можете сделать перенаправление после 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

Это должно работать.

ПОЧТЫ перенаправляются на GET. Вы не можете перенаправить с POST на POST; Вы могли бы переслать это, но это было бы странно. Я рекомендую добавить логику в ваш маршрут GET, которая будет обрабатывать вход в систему, а не вход в систему пользователя.

Кроме того, 304, вероятно, означает, что ваш ответ кэшируется вашим браузером, потому что вы использовали 301 (постоянное перенаправление, очень плохое при входе в систему и т. Д.; используйте 302).

Вам не хватает return:

return res.redirect('/');
Другие вопросы по тегам