How to pass session into views in node/express

I am playing around with node/Express3.0. But I am not sure how to get session out. Especially I am not sure if I am doing right with the following in routes/session.js.

app.use(function(req, res, next) {
  res.locals.session = req.session;
  next();
});

The followings are more details.

I have this in app.js

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  ;

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('testtest'));
  app.use(express.session({
    secret: 'testtest',
    maxAge: 3600000
  }));
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});
...
require ('./routes/session')(app);
...
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

And in routes/session.js

module.exports = function(app) {

  app.use(function(req, res, next) {
    res.locals.session = req.session;
    next();
  });

  app.get('/session/new', function(req, res) {
    res.render('session/new', {title: "Log in"});
  });

  app.post('/session', function(req, res) {
    if (users[req.body.username] && 
      users[req.body.username].password === req.body.password) {
        req.session.user = users[req.body.username];
        res.redirect('/users');
      } else {
        res.redirect('/session/new')
      }
  });

  app.del('/session', function(req, res, next) {
    req.session.destroy();
    res.redirect('/users');
  });

};

I have this in view.

- if (session.user) {

  p
    span Hello 
    span= session.user.name
    span= session
    span !
  p
    form(method="POST", action="/session")
      input(type="hidden", name="_method", value="DELETE")
      input(type="submit", value="Log out")

- } else {

  p
    a(href="/session/new") Login
    span  or 
    a(href="/users/new") Register

- }

But this does not pick up session and gives an error.

1| > 2| - if (session.user) { 3| 4| p 5| span Hello  session is not defined

Thank you for your help in advance.

For the middleware approach to work, you need to make sure your app.use call that installs the middleware is done before your call to app.use(app.router);. Currently you're calling it after via the require('./routes/session')(app); call:

require ('./routes/session')(app);
app.use(app.router);

To do this without middleware, change your res.render call to pass in the local session variable you want available to the view:

app.get('/session/new', function(req, res) {
  res.render('session/new', {title: "Log in", session: req.session});
});