Jsem autorem pg-promise;) A není to poprvé, co je tato otázka položena, proto ji zde uvádím podrobné vysvětlení.
Když vytvoříte instanci nového databázového objektu takto:
const db = pgp(connection);
...vše, co dělá - vytváří objekt, ale nesnaží se připojit. Knihovna je postavena na vrcholu fondu připojení a pouze skutečné metody dotazu vyžadují připojení z fondu.
Z oficiální dokumentace:
Objekt
db
představuje databázový protokol s líným databázovým připojením, tj. pouze skutečné metody dotazu získávají a uvolňují připojení. Proto byste měli vytvořit pouze jeden globální/sdílenýdb
objekt podle podrobností o připojení.
Spojení však můžete vynutit voláním metody connect, jak je uvedeno dále. A i když tato metoda není doporučeným způsobem pro řetězení dotazů (k tomu by se měly používat Tasks), přijde vhod pro kontrolu připojení obecně.
Zkopíroval jsem příklad z mého vlastního příspěvku:https://github.com/vitaly-t/pg-promise/issues/81
Níže je uveden příklad, jak to udělat dvěma způsoby současně, takže si můžete vybrat, který přístup se vám líbí víc.
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);
});
Výstupy:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Každá chyba v knihovně je nejprve hlášena prostřednictvím obslužné rutiny globální chybové události a teprve poté je chyba hlášena v rámci odpovídajícího .catch
handler.
Aktualizovat
Moderní přístup k testování připojení + získání verze serveru v jednom 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
}
Odkazy
- Metoda připojení
- Chyba události