Come .query() è un metodo asincrono, non potrai return il valore come callback verrà chiamato dopo il return viene valutato.
Dovrai continuare la callback modello:
function query(sql, callback) {
client.connect();
client.query(sql, function (err, rows, fields) {
if (err) {
callback(err);
else
callback(null, rows, fields);
});
client.end();
}
Correzione:sembra client.end() consentirà di terminare le query correnti prima che la connessione si chiuda effettivamente.
Tuttavia, chiamando .end() all'interno del callback è comune per molte API in quanto interromperanno tutte le azioni in sospeso.