Passing variables to routes

I'm trying to pass some variables into my routes but can't seem to get it right. I have db.js with this content:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/dowhat');

/**
 * Schema definitions.
 */
var User = new Schema({
    name : { type : String, required : true }
  , pass : { type : String, required : true }
});

var List = new Schema({
    _from       : { type : Schema.Types.ObjectId, ref : 'User' }
  , _to         : { type : Schema.Types.ObjectId, ref : 'User' }
  , title       : String
  , description : String
  , created     : { type : Date, default              : Date.now }
  , updated     : { type : Date, default              : Date.now }
});

exports.users = mongoose.model('User', User);
exports.lists = mongoose.model('List', List);

And I have this on my app.js:

app.use(function(req, res, next) {
  db.users.findOne({ name : 'foo' }, '_id', function(err, user) {
    req.session.user = user._id;
  });

  next();
});

req.session.user is undefined when I tried on routes/index.js:

exports.index = function(req, res) {
  console.log(req.session.user);
  res.render('index');
}

I also tried replacing req.session.user with res.locals.user but it is still undefined when on routes/index.js.

Because next() is being called before the callback of the db.users.findOne has been called.

Just move next inside the callback.

var db = require('./db'); // Make sure you're including me ;D

app.use(function(req, res, next) {
  db.users.findOne({ name : 'foo' }, '_id', function(err, user) {
    req.session.user = user._id;
    next();
  });
});