Poiché node.js non è bloccante e asincrono, in questo codice:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
self.users = results;
}
});
console.log(this.users);
i dati dal DB probabilmente non sono ancora stati caricati nella variabile utenti quando si tenta di accedere alla console. Puoi verificarlo se esegui il tuo console.log
operazione all'interno della query, ad esempio:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
console.log(results);
}
});
Per passare il risultato in una variabile al termine dell'operazione, puoi avvolgere la chiamata del database del tuo client in una funzione con parametro callback e impostare la tua variabile quando viene richiamata la callback, ad esempio:
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);
});
Il codice sopra è solo un concetto.