2012-04-17 6 views
21

के लिए एक्सप्रेस/रेडिस का उपयोग करते समय अपरिभाषित है, मैं अपने एक्सप्रेस ऐप में सत्रों के लिए रेडिस का उपयोग करने की कोशिश कर रहा हूं। बाद में'सत्र' सत्र स्टोर

var express = require('express'); 
var RedisStore = require('connect-redis')(express); 

app.configure('development', function(){  
    app.use(express.session({ secret: "password", 
          store: new RedisStore({ 
              host: "127.0.0.1", 
              port: "6379", 
              db: "mydb" 
             }) 
      })); 

, मेरे एप्लिकेशन में, अगर मैं कुछ ऐसा करना:

मैं निम्न कार्य

var whatever = req.session.someProperty; 

मैं:

संपत्ति पढ़ा नहीं जा सकता 'someProperty 'अपरिभाषित

यह बताता है कि req.session अपरिभाषित है (मैं इस एक console.log प्रविष्टि से मेरी config अनुभाग में देख सकते हैं)

मैं निश्चित रूप से चल रहा है redis मिल गया है, और देख सकते हैं मेरे ऐप शुरू में इससे जुड़ती अपने app.use(express.session(...)); कॉल करने से पहले

app.use(express.cookieParser()); 

: (redis-CLI मॉनिटर का प्रयोग करके)

उत्तर

10

ऐसा लगता है कि खो रहे हैं।

here देखें।

app.use(express.cookieParser()); 
app.use(express.session()); 
app.use(app.router); 

मुझे यकीन है कि अगर रूटर सत्र का उपयोग करने के लिए अनिवार्य है नहीं कर रहा हूँ, लेकिन यह उन्हें टूट जाता है, तो यह उनके समक्ष रखा है:

+0

मुझे एक ही समस्या है, लेकिन मेरे पास app.user (cookieParser()) चीज़ – Herokiller

+1

एक ही समस्या है ...लेकिन अभी भी काम नहीं कर रहा है। – Siten

51

सत्र जब तक आप इस क्रम में इन 3 है काम नहीं करेगा।

+7

मेरे पास app.use (app.router) था; express.session से पहले, जो इसे तोड़ने लगता है। – SuitedSloth

+2

यह उत्तर खोजने के लिए मुश्किल था, दस्तावेज़ों में कहीं कहीं होना चाहिए। Upvoted! – Voles

+0

धन्यवाद, यह मेरे लिए भी लागू है - ऊपर उठाया! – Kvisle

1

मुझे एक ही समस्या थी। यह पता चला कि रेडिस बस एक अलग बंदरगाह के लिए कॉन्फ़िगर किया गया था।

4

एक ही समस्या थी, हालांकि यह एक्सप्रेस के नवीनतम संस्करण में परिवर्तन के कारण हुई थी।

अब आप कनेक्ट-redis निर्यात session.Store विस्तार करने के लिए कार्य करने के लिए एक्सप्रेस-सत्र पारित करने के लिए की जरूरत है:

var express = require('express'); 
var session = require('express-session') 
var RedisStore = require('connect-redis')(session); 
3

बातें हाल ही में एक्सप्रेस 3/एक्सप्रेस के साथ बदल गया है 4. कृपया पुष्टि करें कि आप संस्करण उपयोग कर रहे ।

पूर्ण मिडलवेयर अवधारणा बदल गई। आपको इन midwares मैन्युअल रूप से स्थापित करने की जरूरत है। "एक्सप्रेस-सत्र" 4.0 मध्यवर्ती में से एक है।

मैं पढ़ने के लिए

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 और https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

साथ ही कुछ उपयोगकर्ताओं को भ्रमित कर रहे थे कि github repo ही बस "सत्र" नाम दिया गया है, लेकिन

npm install express-session 

सही है सलाह देते हैं।

+1

इस प्रश्न को 17 अप्रैल 2012 से पूछा गया था, इसलिए संस्करण 4 – Alex

+0

से संबंधित संस्करण 4 के लिए नहीं: https://stackoverflow.com/questions/31611920/session-using-nodejs-and-express-4-x-req- सत्र- अपरिभाषित – SamJakob