2012-08-27 41 views
0

我试图将一些变量传递给我的路由,但看起来似乎没有正确。我有这个内容db.js:将变量传递给路由

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

而且我有这个在我的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.userundefined,当我试图航线上/ index.js:

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

我也尝试用res.locals.user替换req.session.user,但在routes/index.js时它仍然为undefined

+0

这可能是一个愚蠢的问题,但你在做'var db = require('./ db');' – Menztrual

回答

0

因为next()在调用db.users.findOne的回调之前被调用。

只需在回调中移动即可。

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

Dang,应该看过它。 xD Thx!任何想法都是分离路线的推荐做法?或者这很好吗?我阅读了一些关于用app和db作为参数在一个函数中封装路由的内容。 – dsdeiz

+0

你正在做它A-好的:)保持它! – Menztrual