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

Ale*_*lex 21 session redis node.js 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"
                                        })  
          }));
Run Code Online (Sandbox Code Playgroud)

稍后,在我的应用程序中,如果我执行以下操作:

var whatever = req.session.someProperty;
Run Code Online (Sandbox Code Playgroud)

我明白了:

无法读取未定义的属性'someProperty'

这表明req.session是未定义的 (我可以在我的配置部分的console.log条目中看到这一点)

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

小智 53

除非您按此顺序拥有这3个,否则会话将无效:

app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

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

  • 我有app.use(app.router); 在express.session之前,这似乎打破了它. (7认同)
  • 即使所有3件事情都在正确的顺序,req.session仍未定义,不知道为什么. (4认同)
  • 这个答案很难找到,应该在文档的某个地方.Upvoted! (2认同)
  • 从版本1.5.0开始,这个答案将如何更新?目前,快递会是一个单独的模块.根据文档,"cookie解析器中间件不再需要用于此模块工作" (2认同)

Joh*_*yHK 10

看起来你错过了:

app.use(express.cookieParser());
Run Code Online (Sandbox Code Playgroud)

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

看到这里.