我试图在我的快递应用程序中使用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监视器)
答案 0 :(得分:53)
除非您按此顺序拥有这3个,否则会话无法正常工作:
app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);
我不确定路由器是否必须使用会话,但如果将路由放在它们之前就会破坏它们。
答案 1 :(得分:10)
答案 2 :(得分:4)
有同样的问题,但这是由最新版本的快递变化引起的。
您现在需要将快速会话传递给函数connect-redis exports以扩展session.Store:
var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
答案 3 :(得分:3)
Express 3 / Express 4最近发生了变化。 请确认您使用的是 4 版本。
完整的中间件概念发生了变化。您需要手动安装这些中间件。 "快速会话"是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"但
npm install express-session
是对的。
答案 4 :(得分:1)
我遇到了同样的问题。事实证明,redis只是配置为不同的端口。