21

我正在尝试在我的快速应用程序中使用 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 监视器)

4

5 回答 5

53

除非您按以下顺序使用以下 3 个,否则会话将不起作用:

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

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

于 2012-04-20T01:43:27.150 回答
10

看起来你失踪了:

app.use(express.cookieParser());

在你app.use(express.session(...));打电话之前。

这里

于 2012-04-17T13:01:08.853 回答
4

有同样的问题,但它是由最新版本的 express 更改引起的。

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

var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
于 2014-03-08T11:06:28.110 回答
4

Express 3 / Express 4 最近发生了变化。请确认您使用的是版本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 到 4.x

此外,一些用户对github 存储库本身仅命名为“会话”感到困惑,但是

npm install express-session

是正确的。

于 2014-04-11T09:34:37.697 回答
2

我有同样的问题。原来redis只是简单的配置到了不同的端口。

于 2013-09-30T21:41:37.400 回答