Jestem autorem pg-promise;) I nie jest to pierwsze pytanie, które zadaję, więc tutaj szczegółowo je wyjaśniam.
Kiedy tworzysz instancję nowego obiektu bazy danych w ten sposób:
const db = pgp(connection);
...wszystko, co robi - tworzy obiekt, ale nie próbuje się połączyć. Biblioteka jest zbudowana na górze puli połączeń i tylko rzeczywiste metody zapytań żądają połączenia z puli.
Z oficjalnej dokumentacji:
Obiekt db
reprezentuje protokół bazy danych z leniwym połączeniem z bazą danych, tj. tylko rzeczywiste metody zapytań przejmują i zwalniają połączenie. Dlatego powinieneś utworzyć tylko jedną globalną/współdzieloną db
obiekt na szczegóły połączenia.
Możesz jednak wymusić połączenie, wywołując metodę connect, jak pokazano dalej. I chociaż ta metoda nie jest zalecanym sposobem łączenia zapytań (w tym celu należy używać zadań), przydaje się ogólnie do sprawdzania połączenia.
Skopiowałem przykład z własnego postu:https://github.com/vitaly-t/pg-promise/issues/81
Poniżej znajduje się przykład wykonania tego na dwa sposoby w tym samym czasie, dzięki czemu możesz wybrać podejście, które Ci się bardziej podoba.
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);
});
Wyjścia:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Każdy błąd w bibliotece jest najpierw zgłaszany przez globalną procedurę obsługi zdarzeń błędów, a dopiero potem błąd jest zgłaszany w odpowiednim pliku .catch
przewodnik.
Aktualizacja
Nowoczesne podejście do testowania połączenia + uzyskanie wersji serwera w jednym kroku:
// 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
}
Linki
- Metoda połączenia
- Błąd zdarzenia