Я пытаюсь передать некоторые переменные в свои маршруты, но не могу понять это правильно. У меня есть 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 равно undefined, когда я пробовал использовать routes / index.js:

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

Я также пробовал заменить req.session.user на res.locals.user, но он по-прежнему остается undefined в routes / index.js.

1
dsdeiz 27 Авг 2012 в 10:25
Это может быть глупый вопрос, но вы делаете var db = require('./db');
 – 
Menztrual
27 Авг 2012 в 10:50

1 ответ

Лучший ответ

Потому что 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
Menztrual 27 Авг 2012 в 10:52
Блин, надо было это увидеть. xD Thx! Есть идеи, которые рекомендуются для разделения маршрутов? Или это нормально? Я читал кое-что об объединении ваших маршрутов в одну функцию с app и db в качестве параметров.
 – 
dsdeiz
27 Авг 2012 в 11:35
Вы делаете это Хорошо :) Так держать!
 – 
Menztrual
27 Авг 2012 в 11:39