Sono l'autore di pg-promise;) E questa non è la prima volta che viene posta questa domanda, quindi vi sto dando una spiegazione dettagliata qui.
Quando si crea un'istanza di un nuovo oggetto di database in questo modo:
const db = pgp(connection);
... tutto ciò che fa - crea l'oggetto, ma non provare a connettersi. La libreria è costruita sulla parte superiore del pool di connessioni e solo i metodi di query effettivi richiedono una connessione dal pool.
From the official documentation:
oggetto db
rappresenta il protocollo di database, con connessione al database pigrizia, cioè solo i metodi query effettiva acquisire e rilasciare la connessione. Pertanto, è necessario creare un solo oggetto globale/condiviso db
per ogni dettaglio di connessione.
Tuttavia, è possibile chiedere la libreria per la connessione senza eseguire alcuna domanda, utilizzando il metodo connect, come mostrato in seguito.
E anche se questo metodo non è più un metodo consigliato per concatenare le query, dal momento che è stato introdotto il supporto per Tasks (come approccio più sicuro), è comunque utile verificare la connessione in generale.
ho copiato l'esempio dalla mia posta: https://github.com/vitaly-t/pg-promise/issues/81
Di seguito è riportato un esempio di farlo in due modi, allo stesso tempo, in modo da poter scegliere quale approccio si piace di più.
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 => {
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 è in primo luogo segnalato tramite il gestore globale error eventi, e solo allora l'errore viene segnalato nel corrispondente .catch
gestore.
alternativa
Invece di stabilire la connessione manualmente, si può semplicemente eseguire un tipo di query che sarebbe sempre successo per una connessione valida, come la seguente:
db.proc('version')
.then(data => {
// SUCCESS
// data.version =
// 'PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit'
})
.catch(error => {
// connection-related error
});
link API:
E 'stato risposto qui: https://github.com/vitaly-t/pg-promise/issues/81 –