Я пытаюсь передать некоторые переменные в свои маршруты, но не могу понять это правильно. У меня есть 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 ответ
Потому что 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();
});
});
Похожие вопросы
Новые вопросы
node.js
Node.js — это основанная на событиях, неблокирующая, асинхронная среда выполнения ввода-вывода, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на стороне клиента, так и на стороне сервера и, следовательно, выигрывают от возможности повторного использования кода и отсутствия переключения контекста.
var db = require('./db');