使用Express / Redis进行会话存储时,“会话”未定义

我正在尝试在快速应用程序中使用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是未定义的(我可以从configuration节中的console.log条目中看到这一点)

我肯定有redis运行,并可以看到我的应用程序连接到它最初(使用redis-cli显示器)

看起来你错过了:

 app.use(express.cookieParser()); 

在你的app.use(express.session(...)); 呼叫。

看到这里 。

会话将不会工作,除非你有这3个顺序:

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

我不确定路由器是否必须使用会话,但是如果路由器被放置在它们之前就会打断它们。

有同样的问题,但是它是由最新版本的快递的变化造成的。

您现在需要将express-session传递给函数connect-redis exports来扩展session.Store:

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

Express 3 / Express 4最近发生了变化,请确认您使用的是第4版。

完整的中间件概念发生了变化。 您需要手动安装这些中间件。 “express-session”是4.0中间件之一。

我build议阅读

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到4.x版

此外,一些用户感到困惑, github回购本身被命名为“会话”,但是

 npm install express-session 

是正确的。

我有同样的问题。 原来,redis被简单地configuration到不同的端口。