2015-03-01 3 views
6

मैं नोड और एक्सप्रेस सीखने के लिए बहुत नया हूं, और मैं अभी भी एक्सप्रेस के साथ कोड प्रवाह के चारों ओर अपने सिर को लपेटने की कोशिश कर रहा हूं। मान लीजिए कि हमें कोड है कि एक session.js में इस तरह दिखता है:एक्सप्रेस req.session ऑब्जेक्ट कैसे जारी है?

app.post('/session', notLoggedIn, function(req, res) { 
    User.findOne({ 
     username: req.body.username, 
     password: req.body.password 
    }, function (err, user) { 
     if (err) { 
      return next(err); 
     } 
     if (user) { 
      req.session.user = user; 
      res.redirect('/users'); 
     } else { 
      res.redirect('/session/new'); 
     } 
    }); 
}); 

मान लिया जाये कि उपयोगकर्ता एक आवश्यक मोंगो स्कीमा है। क्या मैं अजीब लगता है session.user काम है:

req.session.user = user; 

के बाद से अनुरोध चर रीडायरेक्ट के बाद क्षेत्र से बाहर हो जाएगा, लेकिन हम स्पष्ट रूप से उपयोगकर्ता डेटा जारी रहती को यह कर रहे हैं, मैं लगाना के साथ छोड़ दिया हूँ निम्नलिखित में से कौन से परिदृश्य बताते हैं कि क्या हो रहा है। या तो (ए) तर्क जो कि req पैरामीटर (जब कॉलबैक कहा जाता है) को असाइन किया जा रहा है, अभी भी ढेर पर संग्रहीत/कहीं भी संग्रहीत किया जाता है, (बी) सत्र को स्टैक पर/संग्रहीत किया जाता है और इसे एक नए रिक ऑब्जेक्ट को सौंपा जा रहा है कॉलबैक में पास किया गया, या (सी) बी के समान ही है, लेकिन उपयोगकर्ता फ़ील्ड पर (संभवतः मेरे हिस्से पर असंभव और शायद प्रतीत होता है)।

+0

मैं कोड को देखता हूं, यह बहुत अधिक नहीं है और अच्छी तरह से प्रलेखित होता है https://github.com/expressjs/session/tree/master/session – elclanrs

उत्तर

5

एक समग्र सत्र डेटा संरचना है जो सभी सत्र जानकारी संग्रहीत करती है (जैसे वैश्विक, लेकिन यह डेटाबेस में भी हो सकती है - केवल कुछ जो कम से कम कनेक्शन में लगातार होती है)। प्रत्येक क्लाइंट का सत्र डेटा उस क्लाइंट के सत्र सत्र प्राप्त करने के लिए सत्र स्टोर में अनुक्रमणिका के लिए एक अनूठी कुंजी का उपयोग करता है।

किसी दिए गए ब्राउज़र क्लाइंट के लिए सत्र स्थापित करने का एक हिस्सा एक अद्वितीय क्लाइंट कुंजी (जिसे आमतौर पर कुकी में संग्रहीत किया जाएगा) बना रहा है जो वैश्विक सत्र ऑब्जेक्ट में अनुक्रमणिका बन जाता है।

आने वाले http अनुरोध पर, सत्र का समर्थन करने वाले एक्सप्रेस मिडलवेयर एक विशेष ग्राहक कुकी की जांच करता है और यदि वह विशेष कुकी http अनुरोध पर पाई जाती है और वैश्विक सत्र ऑब्जेक्ट/डेटाबेस में पाई जाती है, तो यह उस सत्र की संग्रहीत जानकारी को जोड़ती है बाद में उपयोग करने के लिए http अनुरोध हैंडलर के लिए अनुरोध ऑब्जेक्ट पर।

  1. आने वाली HTTP अनुरोध:

    तो, यहाँ एक विशिष्ट अनुक्रम है।

  2. सत्र कुकी के लिए मिडलवेयर जांच करता है।
  3. यदि सत्र कुकी वहां नहीं है, तो एक बनाएं और, इस प्रक्रिया में इस http क्लाइंट की पहचान करने के लिए एक अद्वितीय आईडी बनाई गई है।
  4. लगातार सत्र स्टोर में, इस नए क्लाइंट के लिए सत्र आरंभ करें।
  5. यदि सत्र कुकी है, तो इस क्लाइंट के सत्र सत्र के लिए सत्र स्टोर में देखें और उस ऑब्जेक्ट को अनुरोध ऑब्जेक्ट में जोड़ें।
  6. सत्र मिडलवेयर प्रसंस्करण
  7. बाद में इस http अनुरोध की एक्सप्रेस प्रसंस्करण में, यह एक मिलान अनुरोध हैंडलर में मिलता है। इस विशेष http क्लाइंट के लिए सत्र स्टोर से सत्र डेटा पहले से ही अनुरोध ऑब्जेक्ट से जुड़ा हुआ है और अनुरोध हैंडलर का उपयोग करने के लिए उपलब्ध है।
+0

क्या हम चैट कर सकते हैं, मुझे कुछ संदेह हैं, और एक थोड़ी मदद मेरे लिए एक बड़ा लाभ होगा। –

+0

@ सूरजजैन - यह नहीं है कि यह साइट कैसे काम करती है। यदि आपके पास यह काम करने के बारे में कोई प्रश्न है, तो आप समझने में सहायता की आवश्यकता के बारे में विशिष्ट विवरण के साथ स्वयं एक नया प्रश्न पोस्ट कर सकते हैं। – jfriend00

+0

मैं पहले ऐसा करने के लिए उपयोग करता हूं, लोग केवल नीचे वोट देते हैं, यही कारण है कि मैं अब चैट में पूछता हूं, और चैट करता हूं और पूरी तरह से समझता हूं, और फिर इस साइट पर सवालों का जवाब देता हूं, और ज्ञान फैलता हूं। –

संबंधित मुद्दे