Saya penulis pg-promise;) Dan ini bukan pertama kalinya pertanyaan ini diajukan, jadi saya memberikan penjelasan rinci di sini.
Saat Anda membuat instance objek database baru seperti ini:
const db = pgp(connection);
...semuanya - membuat objek, tetapi tidak mencoba untuk terhubung. Pustaka dibangun di atas kumpulan koneksi, dan hanya metode kueri aktual yang meminta koneksi dari kumpulan.
Dari dokumentasi resmi:
Objek
db
mewakili protokol basis data, dengan koneksi basis data yang lambat, yaitu hanya metode kueri aktual yang memperoleh dan melepaskan koneksi. Oleh karena itu, Anda harus membuat hanya satudb
global/bersama objek per detail koneksi.
Namun, Anda dapat memaksa koneksi, dengan memanggil metode connect, seperti yang ditunjukkan lebih lanjut. Dan meskipun metode ini bukan cara yang disarankan untuk membuat kueri berantai (Tugas harus digunakan untuk itu), metode ini berguna untuk memeriksa koneksi secara umum.
Saya menyalin contoh dari posting saya sendiri:https://github.com/vitaly-t/pg-promise/issues/81
Di bawah ini adalah contoh melakukannya dengan dua cara sekaligus, sehingga Anda dapat memilih pendekatan mana yang lebih Anda sukai.
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);
});
Keluaran:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Setiap kesalahan di perpustakaan pertama kali dilaporkan melalui pengendali kejadian kesalahan global, dan baru kemudian kesalahan tersebut dilaporkan dalam .catch
yang sesuai. penangan.
Perbarui
Pendekatan modern untuk menguji koneksi + mendapatkan versi server dalam satu langkah:
// 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
}
Tautan
- Metode terhubung
- Kesalahan acara