6

我已经使用 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)打印出未定义?我没有正确使用它吗?为了将变量保存到用户的会话中,我需要做什么?

客户端收到一个存储为他的 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
4

2 回答 2

20

这是您的问题:app.use(app.router)将您的路由安装在调用链中的那个位置。你在会话中间件之前有它,所以还没有req.session。当您忽略它时,您的路线将在您第一次app.get(或app.post依此类推)时定位。如果您仍然希望控制路由的位置,您可以移动app.use(app.router)到会话中间件下方。

请参阅 Express 的配置中间件文档。

于 2012-04-23T22:16:52.463 回答
2

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

于 2012-04-23T21:50:17.710 回答