35

出于某种原因,一旦我的登录完成,我就无法重定向到 /blog。在我的登录控制器中,我有以下内容。

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

更新为工作代码

4

3 回答 3

67

您不能在 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

这应该有效。

于 2012-07-20T07:03:58.140 回答
4

POST 被重定向到 GET。您不能将 POST 重定向到 POST;你可以转发它,但这会很奇怪。我建议向您的 GET 路由添加逻辑,以处理登录用户与未登录用户。

此外,304 可能意味着您的响应正在被浏览器缓存,因为您使用了 301(永久重定向、登录时非常糟糕等;使用 302)。

于 2012-07-20T13:45:43.310 回答
-3

你失踪了return

return res.redirect('/');
于 2017-06-14T01:26:39.497 回答