NodeJS + ExpressJS + RedisStore会话未定义

我经历了许多同样的问题,但是各种解决scheme都没有帮助。 我正在使用Redis将会话存储在集群NodeJS + ExpressJS应用程序中,但会话始终未定义。 这是我的快速安装程序:

var express = require('express'), RedisStore = require('connect-redis')(express), Config = require('./config/config'), cluster = require("cluster"), QueryManager = require('./service/query_manager'), app = express(); // --- Index --- // function renderSplash(req, res) { res.render(...); } function renderIndex(req, res) { res.render(...); } app.get('/', function(req, res) { if(req.session.user === null) { renderSplash(req, res); } else { renderIndex(req, res); } }); // --- Configuration ---// //EJS app.engine('.html', require('ejs').__express); app.set('view engine', 'html'); app.set('views', __dirname + '/public'); app.configure(function() { //Session app.use(express.cookieParser()); app.use(express.session({ store: new RedisStore({ host: Config.redis.host, port: Config.redis.port }), secret: 'Its a secret.', cookie: { secure: true } })); app.use(validateRequest); //Ensures we're at www. to hit the LB app.use(express.static(__dirname+'/public')); app.use(express.compress); app.use(app.router); }); 

即使没有使用Redis存储,我也收到以下错误: TypeError: Cannot read property 'user' of undefined

您必须在路由之前实例化会话。

 var express = require('express'), RedisStore = require('connect-redis')(express), Config = require('./config/config'), cluster = require("cluster"), QueryManager = require('./service/query_manager'), app = express(); app.use(express.cookieParser()); app.use(express.session({ store: new RedisStore({ host: Config.redis.host, port: Config.redis.port }), secret: 'Its a secret.', cookie: { secure: true } })); // --- Index --- // function renderSplash(req, res) { res.render(...); } function renderIndex(req, res) { res.render(...); } app.get('/', function(req, res) { if(req.session.user === null) { renderSplash(req, res); } else { renderIndex(req, res); } });