2013-07-22 6 views
5

में जीवित है या नहीं, मेरे पास मोंगोडीबी के साथ बैकएंड के रूप में एक ऐप है। जब ऐप शुरू होता है, तो मैंने कनेक्शन सेट अप किया और बाद में अनुरोधों पर इसका इस्तेमाल किया।यह जांचने के लिए कि क्या MongoDB कनेक्शन Node.js

लेकिन अगर औसत समय में मेरा डीबी कॉन्सेसिटन विफल रहता है (यानी मोंगोड दुर्घटनाएं), मैं अनुरोध समय पर इसे कैसे देख सकता हूं?

थोड़ा स्पष्ट करने के लिए:

  • वर्तमान में मैं एक "api.js" है, जो अनुरोध पर db.once('open', function../* setup */)
  • करता है, मैं db.find(conditions, function(err, res) { if (err) ...else ...}) है।

मैं क्या करना चाहता हूं यह जांचें कि कनेक्शन db.find() खंड से पहले जीवित है या नहीं। तो अगर यह नीचे है, तो मैं डीबी कनेक्शन को पुनरारंभ करने का प्रयास कर सकता हूं।

पीएस मुझे पता है, मुझे शायद कनेक्शन कनेक्शन को रखने के बजाय किसी प्रकार का कनेक्शन पूल या इसी तरह सेट करना चाहिए, लेकिन अभी यह सेट है जैसा कि यह है।

+0

ठीक है, यह पता लगाने का सबसे तेज़ तरीका है- कनेक्शन स्थिति में एक त्रुटि ऑपरेशन का प्रयास करने और विफलता पुनः प्रयास करने के लिए होगी (http://stackoverflow.com/questions/8936922/is-inserting-a-new-डेटा -इन्ट्री-तेज़ी से-जांच-अगर-प्रविष्टि-मौजूद है- पहले) पुनः प्रयास करने के लिए सबसे शानदार तरीका क्या होगा, क्या आपको लगता है? – Montagist

उत्तर

5

आप कॉलबैक के रूप में इसे संभालने के लिए ईवेंट का उपयोग कर सकते हैं।
और शायद आपके वैश्विक चर है जो यह पहचान जाएगा कि यह कनेक्ट नहीं है।

आप अलग db.js फ़ाइल कर सकते हैं, जो मॉड्यूल के रूप में व्यवहार करेगा। और आप इससे संग्रह प्राप्त करने के लिए कार्य कर सकते हैं।

var mongodb = require('mongodb'); 
var client; 
var collections = { }; 

new mongodb.Db(...).open((function (err, c) { 
    if (!err) { 
    client = c; 
    client.on('close', function() { 
     client = null; // clear client 
     collections = { }; // clear old collections 
     // connection closed 
    }); 
    } else { 
    // error connecting 
    } 
}); 

// get collection 
exports.get = function(name, callback) { 
    if (client) { 
    if (!collections[name]) { 
     collections[name] = new mongodb.Collection(client, name); 
    } 
    callback(null, collections[name]); 
    } else { 
    // can perform reconnecting and then get collection and call callback 
    callback(new Error('not connected')); 
    } 
} 

तो यह उपयोग करने के लिए:

var db = require('./db.js'); 

db.get('users', function(err, collection) { 
    if (!err) { 
    collection.find({ ... 
    } else { 
    console.log(err); 
    } 
}); 

क्षमा करें, केवल आपके नेवला उपयोग कर रहे हैं, जो थोड़ा अलग हो सकता है देखा।

+1

यही वह है जो मैं वर्तमान में करता हूं - मैं करता हूं, यानी। users.find ({}, फ़ंक्शन (त्रुटि, res) {if (err) .... else ...}); मुझे आश्चर्य है कि अनुरोध भेजने से पहले कनेक्शन का परीक्षण करने का कोई तरीका है ताकि मैं पहले कनेक्शन को पुनर्स्थापित करने का प्रयास करूं। – Zlatko

+0

मैंने अधिक विश्वसनीय समाधान सहित उत्तर अपडेट किया है। – moka

+0

मुझे नहीं पता कि यह सवाल कैसे संबोधित करता है। आपको एक त्रुटि मिलती है यह त्रुटि कई चीजों के लिए हो सकती है, सभी कनेक्शन शामिल नहीं हैं। – Montagist

संबंधित मुद्दे