Dado que node.js no bloquea y es asíncrono, entonces en este código:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
self.users = results;
}
});
console.log(this.users);
Es probable que los datos de la base de datos aún no se carguen en la variable de usuarios cuando intenta iniciar sesión en la consola. Puede verificarlo si hace su console.log
operación dentro de la consulta, por ejemplo:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
console.log(results);
}
});
Para pasar el resultado a una variable cuando finaliza la operación, puede envolver la llamada de la base de datos de su cliente en una función con un parámetro de devolución de llamada y establecer su variable cuando se invoque la devolución de llamada, por ejemplo:
function query(sql, callback) {
client.query(sql, function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
callback(results);
}
});
}
query("SELECT * FROM users", function(results) {
self.users = results;
console.log(self.users);
});
El código anterior es solo un concepto.