Аз съм автор на pg-promise;) И това не е първият път, когато се задава този въпрос, затова му давам подробно обяснение тук.
Когато инстанцирате нов обект на база данни по този начин:
const db = pgp(connection);
...всичко, което прави - създава обекта, но не се опитва да се свърже. Библиотеката е изградена върху пула от връзки и само действителните методи на заявка изискват връзка от пула.
От официалната документация:
Обект
db
представлява протокола на базата данни с мързелива връзка към базата данни, т.е. само действителните методи на заявка придобиват и освобождават връзката. Следователно, трябва да създадете само един глобален/споделенdb
обект за подробности за връзката.
Въпреки това, можете да установите връзка, като извикате метод connect, както е показано по-нататък. И въпреки че този метод не е препоръчителен начин за верижно свързване на заявки (за това трябва да се използват Tasks), той е полезен за проверка на връзката като цяло.
Копирах примера от моята публикация:https://github.com/vitaly-t/pg-promise/issues/81
По-долу е даден пример да го правите по два начина едновременно, така че можете да изберете кой подход ви харесва повече.
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);
});
Изходи:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Всяка грешка в библиотеката първо се докладва чрез глобалния манипулатор на събитие за грешка и едва след това грешката се отчита в съответния .catch
манипулатор.
Актуализиране
Модерен подход за тестване на връзката + получаване на сървърна версия в една стъпка:
// 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
}
Връзки
- Свързване на метод
- Грешка при събитие