在Express.js中使用Session MemoryStore不会定义req.session

YMM*_*MMD 5 session node.js express

我已经使用Express.js设置了一个Node.js测试服务器,如下所示:

var express     = require('express');
var MemoryStore = express.session.MemoryStore;
var app         = express.createServer();

app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(app.router);
    app.use(express.session({
        store: new MemoryStore(),
        secret: 'secret',
        key: 'bla'
    }));
});

app.get('/', function(req, res){
    console.log(req.session);
    res.end("html");
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

为什么console.log(req.session)打印出undefined?我没有正确使用它吗?为了将变量保存到用户的会话,我需要做什么?

客户端收到一个存储为其cookie的SID,但我无法分配任何属性req.session,因为它没有定义.感谢您提供解决此问题的任何提示!:-)

这是我正在使用的版本:

??? express@2.5.9
? ??? connect@1.8.7
? ? ??? formidable@1.0.9
? ??? mime@1.2.4
? ??? mkdirp@0.3.0
? ??? qs@0.4.2
Run Code Online (Sandbox Code Playgroud)

Lin*_*iel 20

这是您的问题:app.use(app.router)将您的路线安装在调用链中的该位置.你会话中间件之前有它,所以还没有req.session.当你把它留下时,你的路线将在你第一次app.get(或app.post等等)时定位.如果您仍希望控制路径的位置,则可以移动app.use(app.router)到会话中间件下方.

请参阅Express" 配置中间件文档".


mih*_*hai 2

我不知道app.router是什么,但这似乎是问题的原因。删除该行使其对我有用。

  • 来自:http://stackoverflow.com/questions/10191692/session-is-undefined-when-using-express-redis-for-session-store 看来在express.session之前使用(app.router)打破了它。下班后拥有它。供参考 :) (2认同)
  • @Linus G Thiel 下面的回答更合适。 (2认同)