Sono l'autore di pg-promise;) E questa non è la prima volta che viene posta questa domanda, quindi ne fornisco una spiegazione dettagliata qui.
Quando istanzia un nuovo oggetto database come questo:
const db = pgp(connection);
...tutto ciò che fa - crea l'oggetto, ma non tenta di connettersi. La libreria si basa sul pool di connessioni e solo i metodi di query effettivi richiedono una connessione dal pool.
Dalla documentazione ufficiale:
Oggetto db
rappresenta il protocollo del database, con connessione al database lazy, ovvero solo i metodi di query effettivi acquisiscono e rilasciano la connessione. Pertanto, dovresti creare un solo db
globale/condiviso oggetto per dettagli di connessione.
Tuttavia, puoi forzare una connessione, chiamando il metodo connect, come mostrato più avanti. E sebbene questo metodo non sia un metodo consigliato per concatenare le query (le attività dovrebbero essere utilizzate per questo), è utile per controllare la connessione in generale.
Ho copiato l'esempio dal mio post:https://github.com/vitaly-t/pg-promise/issues/81
Di seguito è riportato un esempio di come farlo in due modi contemporaneamente, così puoi scegliere l'approccio che preferisci.
const initOptions = {
// global event notification;
error(error, e) {
if (e.cn) {
// A connection-related error;
//
// Connections are reported back with the password hashed,
// for safe errors logging, without exposing passwords.
console.log('CN:', e.cn);
console.log('EVENT:', error.message || error);
}
}
};
const pgp = require('pg-promise')(initOptions);
// using an invalid connection string:
const db = pgp('postgresql://userName:[email protected]:port/database');
db.connect()
.then(obj => {
// Can check the server version here (pg-promise v10.1.0+):
const serverVersion = obj.client.serverVersion;
obj.done(); // success, release the connection;
})
.catch(error => {
console.log('ERROR:', error.message || error);
});
Uscite:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Ogni errore nella libreria viene prima segnalato tramite il gestore di eventi di errore globale, e solo allora l'errore viene segnalato all'interno del corrispondente .catch
gestore.
Aggiorna
Approccio moderno per testare la connessione + ottenere la versione del server in un solo passaggio:
// tests connection and returns Postgres server version,
// if successful; or else rejects with connection error:
async function testConnection() {
const c = await db.connect(); // try to connect
c.done(); // success, release connection
return c.client.serverVersion; // return server version
}
Link
- Metodo di connessione
- Errore evento