Tôi là tác giả của pg-promise;) Và đây không phải là lần đầu tiên câu hỏi này được đặt ra, vì vậy tôi sẽ giải thích chi tiết về nó ở đây.
Khi bạn khởi tạo một đối tượng cơ sở dữ liệu mới như thế này:
const db = pgp(connection);
... tất cả những gì nó làm - tạo ra đối tượng, nhưng nó không cố gắng kết nối. Thư viện được xây dựng trên đầu nhóm kết nối và chỉ các phương thức truy vấn thực tế mới yêu cầu kết nối từ nhóm.
Từ tài liệu chính thức:
Đối tượng
db
đại diện cho giao thức cơ sở dữ liệu, với kết nối cơ sở dữ liệu lười biếng, tức là chỉ các phương thức truy vấn thực tế mới có được và giải phóng kết nối. Do đó, bạn chỉ nên tạo mộtdb
chung / chung chi tiết đối tượng cho mỗi kết nối.
Tuy nhiên, bạn có thể buộc kết nối, bằng cách gọi phương thức kết nối, như được hiển thị thêm. Và mặc dù phương pháp này không phải là cách được khuyến nghị để xâu chuỗi các truy vấn (Nên sử dụng các tác vụ cho việc đó), nhưng nó có ích cho việc kiểm tra kết nối nói chung.
Tôi đã sao chép ví dụ từ bài đăng của chính mình:https://github.com/vitaly-t/pg-promise/issues/81
Dưới đây là ví dụ về việc thực hiện đồng thời theo hai cách, vì vậy bạn có thể chọn bất kỳ cách tiếp cận nào bạn thích tốt hơn.
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);
});
Kết quả đầu ra:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Mọi lỗi trong thư viện lần đầu tiên được báo cáo thông qua trình xử lý sự kiện lỗi chung và chỉ sau đó lỗi mới được báo cáo trong .catch
tương ứng xử lý.
Cập nhật
Phương pháp hiện đại để kiểm tra kết nối + tải phiên bản máy chủ trong một bước:
// 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
}
Liên kết
- Phương thức kết nối
- Lỗi sự kiện