Como .query() es un método asíncrono, no podrá return el valor como devolución de llamada se llamará después el return se evalúa.
Tendrás que continuar con la callback patrón:
function query(sql, callback) {
client.connect();
client.query(sql, function (err, rows, fields) {
if (err) {
callback(err);
else
callback(null, rows, fields);
});
client.end();
}
Corrección:Parece client.end() permitirá que las consultas actuales finalicen antes de que la conexión realmente se cierre.
Sin embargo, llamar a .end() dentro de la devolución de llamada es un lugar común para muchas API, ya que cortarán cualquier acción pendiente.