Olá, pessoal! Espero que estejam todos bem!
Então, estou utilizando os conceitos desse curso num projeto da faculdade e queria realizar o processo de separação das responsabilidades do controller user para o model, onde o controle teria somente as rotas que seriam consumidas, assim como a instrutora fez para o atendimento. Segue o código do controller user.js
const connection = require('../../config/mysql');
const User = require('../../models/user');
const routeBase = '/user'
module.exports = app => {
//get all the users from the database
app.get(routeBase + '/allusers', function(req, res) {
const sql = "SELECT * FROM `user`";
connection.query(sql, (err, result) => {
if (err) throw err;
let users = [];
result.forEach(element => {
users.push(element);
});
res.json(users);
});
});
A questão é que quando eu fui separar as responsabilidades das classes que utilizam a query de SELECT do MySQL, criando um método getAll(), e consequentemente eu dava push num array vazio de todos os users que eu encontravam, o array retornava vazio mesmo que a query estivesse correta. Descobri que isso ocorre porque o connection do MySQL retorna uma promisse e, por isso, o array retorna vazio pois a promisse ainda não finalizou quando eu realizo a separação dessas atribuições. Alguém tem ideia de como eu podeira resolver esse problema? Tentei de várias formas e não consegui.
Segue uma ideia do que eu gostaria de fazer
const connection = require('../config/mysql');
const user = require('../routes/user/user');
class User {
add(user){
const sql = 'INSERT INTO `user` SET ?';
connection.query(sql, user, (erro) => {
if(erro) {
throw erro;
}
});
}
getAll(){
const sql = "SELECT * FROM `user`";
let users = [];
connection.query(sql, (err, result) => {
if (err) throw err;
let users = [];
result.forEach(element => {
users.push(element);
});
});
return users;
}
}
module.exports = new User;