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

时间:2012-04-23 21:25:19

标签: 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);

为什么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

2 个答案:

答案 0 :(得分:20)

这是您的问题:app.use(app.router)将您的路线安装在调用链中的该位置。您在会话中间件之前已经,因此还没有req.session。当您将其遗漏时,只要您执行第一次app.get(或app.post等等),您的路线就会定位。如果您仍希望控制路径的位置,可以将app.use(app.router)移到会话中间件下方。

请参阅快速“ConfigurationMiddleware文档。

答案 1 :(得分:2)

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