使用快递/ Redis的会话存储时,“会话”是未定义使用快递/ Redis的会话存储时,“会话”是未

2019-05-13 13:05发布

我试图使用会话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监视器)

Answer 1:

看起来你错过:

app.use(express.cookieParser());

您之前app.use(express.session(...)); 呼叫。

见这里 。



Answer 2:

会议将无法正常工作,除非你在这个次序,这3个:

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

我不知道,如果路由器是强制使用会话,但它打破他们,如果它放在他们面前。



Answer 3:

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

现在,您需要明确会话传递给函数连接,Redis的出口扩大session.Store:

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


Answer 4:

事情已经用快递3最近更改/快递4.请确认您使用的是4.0版本。

完整的中间件概念改变。 您需要手动安装这些中间件。 “快递会话”是4.0中间件的一个。

我推荐阅读

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

是正确的。



Answer 5:

我有同样的问题。 原来,Redis的是简单地配置到不同的端口。



文章来源: 'session' is undefined when using express / redis for session store