2012-07-19 48 views
25

由於某種原因,我無法重定向到/博客,一旦我的登錄完成。在我的登錄控制器中,我有以下內容。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 

更新工作代碼

+0

你能告訴我們到底是什麼做的?你會得到什麼響應代碼?首先,您需要在初始應用程序加載期間設置中間件('app.use(express.bodyParser())'),而不是在每個請求過程中。 – 2012-07-20 00:51:37

+0

我更新了它。我沒有得到任何迴應,我有app.use(express.bodyParser())在我的應用程序加載server.js – lostAstronaut 2012-07-20 01:01:38

+0

您正在生成200響應代碼,所以你必須得到一個響應,也許與一個儘管空的身體。你確定登錄控制器的'post'函數被調用嗎?你看到那些'console.log'語句的輸出嗎?鑑於你的if/else,在任何情況下你都調用'res.redirect',所以你應該得到一個301響應代碼。這導致我相信它是完全不同的路由處理程序,它正在響應請求。 – 2012-07-20 02:09:57

回答

56

你不能讓一個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 

這應該工作。

+0

謝謝你的工作,一個問題。你能從服務器重定向嗎?說我去博客和會話cookie不簽出。你可以通過res.redirect或其他方式重新導向登錄。 – lostAstronaut 2012-07-20 14:09:55

+0

感謝您的回覆。對於爲什麼它不是從ajax開始工作,而是從瀏覽器開始,我一直在嘲弄我的頭腦3天。 – Tarun 2016-10-26 11:07:49

4

POST被重定向到GET。您不能將POST重定向到POST;你可以轉發它,但那會很奇怪。我建議在你的GET路由中添加邏輯來處理已登錄的用戶和未登錄的用戶。

另外,304可能意味着您的響應正在被您的瀏覽器緩存,因爲您使用了301(永久重定向,登錄時非常糟糕;使用302)。

-2

你缺少return

return res.redirect('/'); 
+0

對我不起作用 – 2017-06-14 13:48:22

+0

這是5年前問的,查爾斯是正確的 – lostAstronaut 2017-06-16 11:33:36

相關問題