使用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议阅读
此外,一些用户感到困惑, github回购本身被命名为“会话”,但是
npm install express-session
是正确的。
我有同样的问题。 原来,redis被简单地configuration到不同的端口。