Можно ли обработать запрос db.model.find()
внутри контекст функции и получить в результате без с использованием возвратов и обещает с библиотекой мангустов?Синхронного мангуста
Мне нужно быть уверенным, если какой-то пользователь существует в процессе работы контроллера, поэтому я не могу свести к минимуму текущую область для обратного вызова из-за большого количества одинаковых операций (например, связь с базой данных). Также я пытаюсь реализовать MVC-модель в своем проекте, поэтому хочу сохранить вспомогательные библиотеки (модули) в разделенных файлах. Вот почему я не хочу использовать какие-либо обратные вызовы или обещания - они будут многократно усложнять все, даже больше, чем дела.
Например, как я должен переписать быть выполнен успешно (если это на самом деле возможно) (вы можете игнорировать модель входа в систему и контроллер - они написаны, чтобы представлять сложность, если переписать этот код с помощью функции обратного вызова) следующий код:
user.js Lib
var db = require('./lib/db');
class User{
constructor(id){ //get user by id
var result = db.models.user.findOne({_id: id}); //unsupported syntax in real :(
if(!result || result._id != _id)
return false;
else{
this.userInfo = result;
return result;
}
}
}
module.exports = User;
входа модели
var user = require('./lib/user')
var model = {};
model.checkUserLogged(function(req){
if(!req.user.id || req.user.id == undefined)
return false;
if(!(this.user = new user(req.user.id)))
return false;
else
return true;
});
module.exports = model;
Контроллера Войти
var proxy = require('express').router();
proxy.all('/login', function(req, res){
var model = require('./models/login');
if(!model.checkUserLogged()){
console.log('User is not logged in!');
res.render('unlogged', model);
}else{
console.log('User exists in database!');
res.render('logged_in', model);
}
});
Генератора функция/выходы, асинхронный/Await (es2017), и все так далее может быть использован только, чтобы решить эту проблему без вложенности.
Thx заранее.
FYI, 'асинхронного/await' * не * части ES7 (ES2016). Это будет часть выпуска этого года, ES2017. –
К сожалению. Thx для внимания :) Я исправил это в тексте вопроса. – impulsgraw