POST

2012-07-19 18 views
25

से 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 

कोड

+0

क्या आप बता सकते कि यह वास्तव में क्या कर रहा है? आपको क्या प्रतिक्रिया कोड मिलता है? एक बात के लिए, आपको प्रारंभिक ऐप लोड के दौरान अपने मिडलवेयर ('app.use (express.bodyParser())') सेट अप करने की आवश्यकता है, प्रत्येक अनुरोध प्रक्रिया के दौरान नहीं। –

+0

मैंने इसे अपडेट किया। मुझे कोई प्रतिक्रिया नहीं मिल रही है और मेरे पास app.use (express.bodyParser()) में मेरे ऐप लोड में server.js – lostAstronaut

+0

है, आप 200 प्रतिक्रिया कोड उत्पन्न कर रहे हैं, इसलिए आपको एक प्रतिक्रिया मिलनी चाहिए, शायद हालांकि खाली शरीर। क्या आप वाकई लॉगिन नियंत्रक के 'पोस्ट' फ़ंक्शन को कॉल कर रहे हैं? क्या आप उन 'console.log' कथन से आउटपुट देखते हैं? अगर आप किसी अन्य मामले में 'res.redirect'' कह रहे हैं तो आपको दिया गया है, इसलिए आपको 301 प्रतिक्रिया कोड प्राप्त करना चाहिए। इससे मुझे विश्वास होता है कि यह एक अलग मार्ग हैंडलर है जो अनुरोध का जवाब दे रहा है। –

उत्तर

56

काम कर आप एक AJAX के बाद एक पुनर्निर्देशन नहीं कर सकते करने के लिए अद्यतन। आपको जावास्क्रिप्ट में इसे स्वयं करने की ज़रूरत है।

सर्वर

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

को कैसे ठीक करूं धन्यवाद धन्यवाद, एक प्रश्न। क्या आप सर्वर से रीडायरेक्ट कर सकते हैं? कहें कि मैं ब्लॉग पर जाता हूं और सत्र कुकी चेक नहीं करता है। क्या आप res.redirect या कुछ और के माध्यम से लॉगिन पर रीडायरेक्ट कर सकते हैं। – lostAstronaut

+0

उत्तर के लिए धन्यवाद। मैं अपने सिर को 3 दिनों तक बैंग कर रहा था क्योंकि यह AJAX से क्यों काम नहीं कर रहा है लेकिन ब्राउज़र हिट से। – Tarun

4

POST को जीईटी पर रीडायरेक्ट किया जाता है। आप किसी पोस्ट पर पोस्ट पर रीडायरेक्ट नहीं कर सकते हैं; आप इसे अग्रेषित कर सकते हैं लेकिन यह अजीब होगा। मैं आपके GET मार्ग पर तर्क जोड़ने की अनुशंसा करता हूं जो लॉग इन बनाम उपयोगकर्ता को लॉग इन नहीं करेगा।

इसके अलावा, 304 संभावित रूप से आपकी प्रतिक्रिया आपके ब्राउज़र द्वारा कैश की जा रही है क्योंकि आपने 301 (स्थायी रीडायरेक्ट, लॉगिन पर बहुत बुरा, आदि; 302 का उपयोग किया) का उपयोग किया था।

-2

आप return याद कर रहे हैं:

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

मेरे लिए काम नहीं किया –

+0

यह 5 साल पहले पूछा गया था, चार्ल्स सही था – lostAstronaut