MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

भिक्षु के साथ मोंगो डीबी:डीबी डाउन होने पर त्रुटि पकड़ने और संभालने में त्रुटि

वैसे आप वास्तव में bufferMaxEntries . सेट कर सकते हैं विकल्प ( Db के तहत प्रलेखित लेकिन उस वस्तु के उपयोग के लिए बहिष्कृत, कनेक्शन पर "शीर्ष स्तर के रूप में प्रदर्शित किया गया") का उपयोग करें, जो अनिवार्य रूप से ड्राइवर पर "क्यूइंग" अनुरोधों को रोकता है जब कोई कनेक्शन वास्तव में मौजूद नहीं होता है।

एक न्यूनतम उदाहरण के रूप में:

index.js

const express = require('express'),
      morgan = require('morgan'),
      db = require('monk')('localhost/test',{ bufferMaxEntries: 0 }),
      app = express();

const routes = require('./routes');

app.use(morgan('combined'));

app.use((req,res,next) => {
  req.db = db;
  next();
});

app.use('/', routes);

(async function() {

  try {

    await db.then(() => 1);

    let collection = db.get('test');
    await collection.remove({});

    await collection.insert(Array(5).fill(1).map((e,i) => ({ a: i+1 })));
    console.log('inserted test data');

    await app.listen(3000,'0.0.0.0');
    console.log('App waiting');

  } catch(e) {
    console.error(e);
  }

})();

मार्ग.जेएस

var router = require('express').Router();

router.get('/', async (req,res) => {
  try {
    let db = req.db,
        collection = db.get('test');

    let response = await collection.find();
    res.json(response);
  } catch(e) {
    res.status(500).json(e);
  }
});

module.exports = router;

तो मैं वास्तव में कम से कम "स्टार्ट अप" पर उपस्थित होने के लिए डेटाबेस कनेक्शन की प्रतीक्षा कर रहा हूं, लेकिन वास्तव में केवल उदाहरण के लिए क्योंकि मैं वास्तव में पुनर्प्राप्त करने के लिए कुछ डेटा डालना चाहता हूं। इसकी आवश्यकता नहीं है, लेकिन मूल अवधारणा Promise . की प्रतीक्षा करना है हल करने के लिए:

await db.then(() => 1);

तुच्छ की तरह, और वास्तव में आपके वास्तविक कोड के लिए आवश्यक नहीं है। लेकिन मुझे अब भी लगता है कि यह अच्छा अभ्यास है।

असली परीक्षा mongod . को रोक कर की जाती है या अन्यथा सर्वर को पहुंच से बाहर करना और फिर अनुरोध जारी करना।

चूंकि हम कनेक्शन विकल्पों को { bufferMaxEntries: 0 } . पर सेट करते हैं इसका मतलब है कि तुरंत जैसा कि आप डेटाबेस को एक आदेश जारी करने का प्रयास करते हैं, यदि कोई वास्तविक कनेक्शन मौजूद नहीं है तो विफलता वापस कर दी जाएगी।

बेशक जब डेटाबेस फिर से उपलब्ध हो जाता है, तो आपको त्रुटि नहीं मिलेगी और निर्देश सामान्य रूप से होंगे।

विकल्प के बिना डिफ़ॉल्ट रूप से संचालन को "एन-क्यू" करना है जब तक कि कनेक्शन हल नहीं हो जाता है और फिर "बफर" अनिवार्य रूप से "प्ले" होता है।

आप इसका अनुकरण कर सकते हैं (जैसा मैंने किया) mongod . को "रोक" कर डेमॉन और अनुरोध जारी करना। फिर डेमॉन को "शुरू" करना और अनुरोध जारी करना। इसे केवल पकड़ी गई त्रुटि प्रतिक्रिया वापस करनी चाहिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node.js . के माध्यम से MongoDB में दस्तावेज़ सम्मिलित करते समय त्रुटि

  2. एम्बेडेड मोंगोडब PHP की गिनती कैसे करें?

  3. सेव () और अपडेट () का उपयोग करने के बीच नेवला अंतर

  4. नेस्टेड दस्तावेज़ मान के साथ MongoDB .findOne() फ़ंक्शन का उपयोग करना

  5. नेवला/मोंगोडब क्वेरी एकाधिक प्रकार