1

我正在尝试将一些变量传递到我的路线中,但似乎无法正确处理。我有包含以下内容的 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我尝试使用 routes/index.js 时:

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

我也尝试过替换req.session.userres.locals.user但它仍然undefined在 routes/index.js 上。

4

1 回答 1

0

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

只需在回调中移动 next 即可。

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();
  });
});
于 2012-08-27T06:52:58.230 回答