मैं पीजी-वादा का लेखक हूं;) और यह पहली बार नहीं है जब यह प्रश्न पूछा गया है, इसलिए मैं इसे यहां एक विस्तृत विवरण दे रहा हूं।
जब आप किसी नए डेटाबेस ऑब्जेक्ट को इस तरह इंस्टेंट करते हैं:
const db = pgp(connection);
... यह सब करता है - वस्तु बनाता है, लेकिन यह कनेक्ट करने का प्रयास नहीं करता है। लाइब्रेरी को कनेक्शन पूल के ऊपर बनाया गया है, और केवल वास्तविक क्वेरी विधियाँ ही पूल से कनेक्शन का अनुरोध करती हैं।
आधिकारिक दस्तावेज़ीकरण से:
<ब्लॉकक्वॉट>
वस्तु db
आलसी डेटाबेस कनेक्शन के साथ डेटाबेस प्रोटोकॉल का प्रतिनिधित्व करता है, यानी केवल वास्तविक क्वेरी विधियां कनेक्शन प्राप्त करती हैं और जारी करती हैं। इसलिए, आपको केवल एक वैश्विक/साझा db
बनाना चाहिए प्रति कनेक्शन विवरण वस्तु।
हालांकि, जैसा कि आगे दिखाया गया है, आप विधि कनेक्ट को कॉल करके कनेक्शन को बाध्य कर सकते हैं। और जबकि यह विधि प्रश्नों को जोड़ने के लिए अनुशंसित तरीका नहीं है (इसके लिए कार्यों का उपयोग किया जाना चाहिए), यह सामान्य रूप से कनेक्शन की जांच में काम आता है।
मैंने अपनी पोस्ट से उदाहरण कॉपी किया: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
}
लिंक
- विधि कनेक्ट
- ईवेंट त्रुटि