我正在尝试在我的快递应用程序中使用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 回答
看起来你错过了:
在你的
app.use(express.session(...));
电话之前 .见here .
除非您按此顺序拥有这3个,否则会话将无效:
我不确定路由器是否必须使用会话,但如果它放在它们之前它会破坏它们 .
有同样的问题,但它是由最新版本的快递变化引起的 .
您现在需要将快速会话传递给函数connect-redis exports以扩展session.Store:
Express 3 / Express 4最近发生了变化 . 请确认您使用的是版本 4 .
完整的中间件概念发生了变化 . 您需要手动安装这些中间件 . “express-session”是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-to-4.x
此外,一些用户感到困惑的是github repo本身仅被命名为"session"但是
是正确的 .
我有同样的问题 . 事实证明,redis只是配置为不同的端口 .