Только начинаю осваивать Node.js. Из-за асинхронности столкнулся с проблемой при работе с базой.
Для БД использую mongoDB + mongoose на ноде.
Немного об архитектуре.
reqHandlers.js - тут лежат методы для обработки запросов.
dbHandlers.js - тут методы для работы с DB. Эти методы никак не могут влиять на запрос. Только вернуть данные из базы или текст ошибки.
Задача: Получить из БД данные из юзера и дальше как-то их использовать.
В результате родился такой код:
файл reqHanders.js - обработка запроса
function login(req,res,next) {
var auth = req.body.auth;
var promise = new Q;
promise.then(dbHandlers.login(auth.login.toLowerCase(),auth.password))
.then(function makeSmt(user){
console.log("Q: "+user); //как организовать код, чтобы в переменной user лежали данные полученные из БД?
});
}
файл dbHandlers.js - запрос к базе
function login(login,password){
var connection = mongoose.connection;
if(!connection) return null;
var users = User.users;
users.find({'login':login,'password':password},function(err,user){
if(err){
console.error(err.stack);
//req.emit('error','userIncor');
return;
}
if(user.length === 0){
//req.emit('error','userIncor');
return;
}
//req.emit('success',user[0]);
return;
});
}
Вопрос в том, как организовать код, чтобы в переменной user были данные, полученные из базы.
Подозреваю, что использую не все возможности Q. Буду рад советам и ссылкам.