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.user私がundefinedroutes/index.jsを試したときです:

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

私も置き換えreq.session.userてみましたが、routes/index.js ではres.locals.userまだです。undefined

4

1 に答える 1

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