मैंने यह किया है से पहले ... मैं क्या मैं गलत इस बार कर रहा हूँ का पालन नहीं करते अपरिभाषित, लेकिन मैं कुछ घंटों के लिए संघर्ष कर रहे हैं और अब अपने आप पर विचार मानसिक रूप से अवरुद्ध इसी कोड:NodeJS: एक्सप्रेस + RedisStore, req.session
app.use(express.bodyParser());
app.use(i18next.handle);
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
app.set('view engine', 'swig');
app.set('view cache', false);
var session_store = new RedisStore({ client : redis_client});
app.use(express.errorHandler({ dumpExceptions : true, showStack : true}));
app.use(express.cookieParser());
app.use(express.session({ store : session_store, secret : SESSION_SECRET, key : "sid" }));
app.use(app.router);
फिर जब अनुरोधों को संभालने, यहाँ सिर्फ एक उदाहरण है: Redis को
app.get('/session_test', function (req, res, next) {
console.log(req.session); //undefined
});
कनेक्शन ठीक काम कर रहा है। कोई त्रुटि नहीं दिखायी गयी है। फिर, अनुरोध से इसे एक्सेस करने का प्रयास करते समय, req.session अपरिभाषित है। ब्राउज़र सही सिड भेज रहा है।
मैं सटीक प्रवाह उस अनुरोध के दौरान होता है पर कोई विशेषज्ञ हूँ, लेकिन डिबगिंग के बाद, यह अगर रूटर सत्र मिडलवेयर से पहले कहा जा रहा था के रूप में लगता है। किसी भी के लिए पहले से
धन्यवाद और सभी संभावना मदद करते हैं। मैं कोई भी कोड प्रदान करूंगा जो मैं कर सकता हूं, मुझे यकीन है कि आपकी मदद का क्या हो सकता है।
यहां अधिक कोड है। server.js
//Dependency modules
var express = require('express'),
app = express.createServer(),
//Application dependency modules
settings = require('./settings'), //app settings
routes = require('./routes'), //http routes
rtroutes = require('./rtroutes'); //real time communication routes (io)
var io = require('socket.io').listen(app);
var appWithSettings = settings.setup(io, app);
routes.settings.setup(appWithSettings);
rtroutes.settings.setup(io, appWithSettings);
कोई मार्ग नहीं जोड़ रहे हैं जब तक routes.settings.setup कहा जाता है। सेटिंग्स (जो वैश्विक सेटिंग्स है) एक बहुत बड़ी फाइल है। यही वह जगह है जहां सभी विन्यास किया जाता है। सेटिंग तब तक नहीं जोड़े जाते हैं जब तक सेटिंग्स.सेटअप विधि भी नहीं कहा जाता है।
//Dependency modules
var express = require('express'),
redis = require('redis'),
//Important configuration values
var SESSION_SECRET = 'some secret thing which doesnt belong to stackoverflow!',
insert_other_variables_here = "lalala";
//Computed general objects
var RedisStore = require('connect-redis')(express),
redis_client = redis.createClient(REDIS_PORT, REDIS_HOST);
exports.setup = function (io, app) {
app.configure(function() {
app.use(express.bodyParser());
app.use(i18next.handle);
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
app.set('view engine', 'swig');
app.set('view cache', false);
var session_store = new RedisStore({ client : redis_client});
app.use(express.errorHandler({ dumpExceptions : true, showStack : true}));
app.use(express.cookieParser());
console.log("ABOUT TO ADD SESSION STORE MIDDLEWARE");
app.use(express.session({ store : session_store, secret : SESSION_SECRET, key : "sid" }));
console.log("AND NOW ADDED THE SESSION STORE MIDDLEWARE");
app.use(app.router);
});
app.configure('development', function() {
//some things in here, but nothing that affects app. I have commented this
//for debugging and it changed nothing
});
app.configure('production', function() {
//mostly configuration for io and some caching layers, as well as servers info
app.use(express.errorHandler());
app.use(express.logger({ stream : logFile }));
});
app.listen(WEB_PORT);
return {
app : app,
//some other stuff that isn't relevant
}
}
मैं 25 मार्गों 4 अलग फ़ाइलें (किसी भी तरह मैं अब तक के सत्र के लिए एक की जरूरत नहीं है में विभाजित किया है, के बाद से मैं कुछ भागों में देरी किया गया था और सब कुछ की जरूरत नेवला साथ किया गया था: यहाँ फ़ाइल का एक हिस्सा है)। यह इस प्रकार से किया जा रहा है का एक उदाहरण (फर्जी नाम के साथ):
मार्गों/index.js
export.settings = require("./settings");
मार्गों/settings.js
exports.setup = function (app_settings) {
require("./route1")(app_settings);
require("./route2")(app_settings);
require("./route3")(app_settings);
};
यहाँ एक बाहर छीन लिया "route1" है फ़ाइल ("मार्गों/route1.js"):
module.exports = function (app_settings) {
var app = app_settings.app;
console.log("ABOUT TO ADD ROUTES")
app.get("/signin", function (req, res, next) {
console.log(req.session); //this will be undefined
});
app.get("/register", function (req, res, next) {
});
app.get('/language', function (req, res, next) {
});
app.post('/settings', function (req, res, next) {
});
console.log("ADDED ROUTES NOW!")
}
सो आप इस पंक्ति में वहाँ दो बार राशि प्रयास करना चाहिए: app.use (express.session ({दुकान: session_store, रहस्य: SESSION_SECRET, कुंजी: "sid"})); – chovy
मेरा बुरा, मैंने दो बार कोड चिपकाया (सभी लाइनें वहां दो बार थीं) – Mamsaac
क्या इससे समस्या ठीक हुई? मैं नहीं देखता कि आप req का उपयोग कहां कर रहे हैं।सत्र – chovy