使用express / redis进行会话存储时,'session'未定义

时间:2012-04-17 12:54:41

标签: session node.js 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监视器)

5 个答案:

答案 0 :(得分:53)

除非您按此顺序拥有这3个,否则会话无法正常工作:

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

我不确定路由器是否必须使用会话,但如果将路由放在它们之前就会破坏它们。

答案 1 :(得分:10)

看起来你错过了:

app.use(express.cookieParser());
app.use(express.session(...));来电之前

请参阅here

答案 2 :(得分:4)

有同样的问题,但这是由最新版本的快递变化引起的。

您现在需要将快速会话传递给函数connect-redis exports以扩展session.Store:

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

答案 3 :(得分:3)

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

完整的中间件概念发生了变化。您需要手动安装这些中间件。 "快速会话"是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本身仅被命名为" session"但

npm install express-session

是对的。

答案 4 :(得分:1)

我遇到了同样的问题。事实证明,redis只是配置为不同的端口。