2012-04-17 146 views
21

我正在嘗試在我的快速應用中使用redis進行會話。使用Express/Redis進行會話存儲時'會話'未定義

我做到以下幾點:

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)

我肯定患了Redis的運行,並能看到我的應用程序最初連接到它(使用Redis的-CLI顯示器)

回答

10

看起來你錯過:

app.use(express.cookieParser()); 

app.use(express.session(...));調用之前。

請參閱here

+0

我有同樣的問題,但我確實有app.user(cookieParser())的東西 – Herokiller 2015-12-13 13:55:23

+1

有同樣的問題...但仍然沒有工作。 – Siten 2016-02-22 11:34:21

51

會話不會工作,除非你在這個次序,這3:

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

我不知道,如果路由器是強制使用會話,但它打破他們,如果它放在他們面前。

+7

我有app.use(app.router);在express.session之前,這似乎打破了它。 – SuitedSloth 2012-06-01 04:50:46

+2

這個答案很難找到,應該在文檔的某個地方。 Upvoted! – Voles 2012-08-27 14:18:46

+0

謝謝,這適用於我 - - upvoted! – Kvisle 2012-10-14 00:32:28

1

我有同樣的問題。事實證明,redis被簡單地配置到不同的端口。

4

有同樣的問題,但它是由最新版本的快遞的變化引起的。

現在需要明確會話傳遞給函數連接,Redis的出口擴大session.Store:

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

事情已經用快遞3 /快遞公司最近改變4. 請確認您使用的版本。

完整的中間件概念發生了變化。您需要手動安裝這些中間件。 「express-session」是4.0中間件之一。

我建議閱讀

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

另外一些用戶感到困惑的是,github repo本身被命名爲只是 「會議」,但

npm install express-session 

是正確的。

+1

這個問題被問到2012年4月17日,因此不涉及到版本4 – Alex 2014-04-11 09:56:03

+0

對於版本4:https://stackoverflow.com/questions/31611920/session-using-nodejs-and-express-4-x-req-session-未定義 – SamJakob 2017-06-17 09:35:56