(решение внизу)
Проект строительства
Я конвертирую «простой» проект node.js в полноценный объектный проект node.js. Я нашел ресурсы, чтобы лучше организовать свои файлы, но у меня все еще есть проблемы с классами. Я сделал проект php в объекте, но структура JS узла кажется особенной.
Я проконсультировался:
Насколько я понимаю:
- app.js - это мой маршрутизатор, с которого я буду определять, какой контроллер мне нужен для ответа на запрос клиента.
- / route - это место, где у меня есть контроллеры, где я создаю экземпляры своих объектов и использую их методы.
проектная организация
Мои классы находятся в папке в корне, но я могу переместить ее в папку public / javascript. Моя проблема заключается в том, чтобы ограничить код уровня приложения классами, которые должны обращаться к базе данных.
Например, только класс User имеет метод для обновления имени пользователя в базе данных. Так что в моих контроллерах (/ маршруты) я не хочу никаких запросов SQL (кстати, используя sequelize).
Я не знаю, как это сделать
Я попытался выполнить обещание в контроллере, в котором я вызываю метод класса, который выполняет запрос и возвращает результат.
var user = new User();
var users = new Promise(function(resolve, reject) {
user.select();
});
Promise.all([users]).then(function(values){
console.log(values);
}
console.log(users);
)
В моем классе я делаю
models.user.findAll({
attributes: ['user_login','user_points','user_id']
}).then(
users => {
resolve(users);
}
)
Здесь, как и ожидалось, разрешение не определено. Но если я поставлю решимость сразу после вызова метода класса следующим образом:
var users = new Promise(function(resolve, reject) {
user.select();
resolve(result);
});
результат не определен, и он будет решен без ожидания выполнения запроса.
Вопросы
Поскольку я не экспериментировал и не нашел какой-либо подробной или недавней темы на эту тему, я понятия не имею, как поступить.
Мой первый вопрос: может ли проблема быть связана с организацией файлов (или, как правило, моя обычная / хорошая практика).
Мой второй вопрос: как мне обработать этот тип структуры с помощью классов и node.js, чтобы мой пример работал?
Спасибо за вашу помощь.
Я добавлю, что, поскольку я не нахожу недавнюю тему на эту тему, я очень заинтересован в создании пошагового руководства по созданию полного объектного проекта в файле node.js с app / route / classes и ES6 js. Цель состоит в том, чтобы лучше понять это и передать его моему руководителю, чтобы он мог исправить это и использовать его для будущих новобранцев и опубликовать его.
Решение
Благодаря @estus я теперь понимаю, что вы можете хранить Promise в переменной.
Это позволяет мне использовать .then для этой переменной.
var result = a.select();
result.then(function(result) {
console.log('my result : ', result);
});
В классе вы возвращаете результат только потому, что не хотите выполнять обещание Sequelize:
users => {
return users;
}