首页 文章

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

提问于
浏览
21

我正在尝试在我的快递应用程序中使用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 回答

  • 3

    看起来你错过了:

    app.use(express.cookieParser());
    

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

    here .

  • 10

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

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

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

  • 53

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

    您现在需要将快速会话传递给函数connect-redis exports以扩展session.Store:

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

    Express 3 / Express 4最近发生了变化 . 请确认您使用的是版本 4 .

    完整的中间件概念发生了变化 . 您需要手动安装这些中间件 . “express-session”是4.0中间件之一 .

    我建议阅读

    http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

    此外,一些用户感到困惑的是github repo本身仅被命名为"session"但是

    npm install express-session
    

    是正确的 .

  • 1

    我有同样的问题 . 事实证明,redis只是配置为不同的端口 .

相关问题