2013-12-23 44 views
1

我已經通過許多問題解決了同一問題,但各種解決方案都沒有幫助。我正在使用Redis將會話存儲在羣集化的NodeJS + ExpressJS應用程序中,但會話始終未定義。這是我的快速安裝:NodeJS + ExpressJS + RedisStore會話未定義

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

+1

你是否嘗試過移動東西,比如在路由之前實例化會話,並且你是否在某處設置了session.user? – adeneo

+0

我嘗試了所有的配置移動,沒有成功。像'req.session.user =「Hi」;'做一些事情''拋出相同的錯誤,因爲'req.session'是未定義的。 – kz3

+0

@adeneo哎呀,我太快讀了你的評論。我沒有嘗試過在路由之前配置會話,這沒有辦法。如果你寫這個答案,我會接受。謝謝 ! – kz3

回答

2

您將有路線之前實例化會話。

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); 
    } 
});