I have set up a Node.js test server with Express.js which looks like this:
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);
Why does console.log(req.session)
print out undefined? Didn't I use it correctly? What do I need to do in order to save variables to a user's session?
The client receives a SID which is stored as his cookie, but I cannot assign any attributes to req.session
, because it is not defined. Thanks for any hints to solve this problem! :-)
This are the versions I'm using:
├─┬ express@2.5.9
│ ├─┬ connect@1.8.7
│ │ └── formidable@1.0.9
│ ├── mime@1.2.4
│ ├── mkdirp@0.3.0
│ └── qs@0.4.2
Here's your problem: app.use(app.router)
mounts your routes in that position in the call chain. You have it before your session middleware, so there is no req.session
yet. When you leave it out, your routes will be positioned whenever you do your first app.get
(or app.post
and so on). If you still wish to control where your routes should be, you can just move app.use(app.router)
below the session middleware.
See Express' Configuration and Middleware documentation.
I don't know what app.router
is but it seems to be the cause of the problem. Deleting that line made it work for me.