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();
});
});