2013-03-29 10 views
38

खोलने के लिए यह समस्या का एक सरलीकृत संस्करण है, लेकिन मूल रूप से मैं नेवला साथ 2 MongoDB कनेक्शन को खोलने के लिए कोशिश कर रहा हूँ और यह मेरे दे रही है कोशिश कर रहा है "खुली हुई कनेक्शन खोलने की कोशिश कर रहा।" त्रुटि।नेवला खुली हुई कनेक्शन

कोड का नमूना:

var db1 = require('mongoose'); 
db1.connect('my.db.ip.address', 'my-db'); 

var db2 = require('mongoose'); 
db2.connect('my.db.ip.address', 'my-db'); 

db2.connection.close(); 
db1.connection.close(); 

किसी भी विचार यह काम करने के लिए कैसे?

+1

@NilsH: उपयोग के मामले: डीबी कनेक्शन आवेदन और पर्यावरण यह में चल रहा है के बीच ढीला संयोजन बनाने के लिए विभिन्न वातावरण (prod, मंचन, देव) के लिए विभिन्न वर्गों का उपयोग कर कॉन्फ़िग फ़ाइल द्वारा निर्णय लिया।देव में सभी डेटाबेस लोकहोस्ट पर हैं ताकि इसे प्रबंधित करना आसान हो; उत्पादन डेटाबेस में अलग-अलग प्रतिकृति सेटिंग्स आदि के साथ अलग मशीनों पर हैं – robbrit

उत्तर

44

connect() db करने के लिए डिफ़ॉल्ट कनेक्शन खोलता है। चूंकि आप दो अलग-अलग कनेक्शन चाहते हैं, createConnection() का उपयोग करें।

एपीआई लिंक: http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection

+0

यह 2 डेटाबेस के लिए एकाधिक कनेक्शन बनाने के लिए मंगोलैब पर काम नहीं करता है, जिसके परिणामस्वरूप 'मोंगोएरर: डेटाबेस नामों में चरित्र नहीं हो सकता है'। '' mongolab – CENT1PEDE

2

रघुवीर जवाब पर जोड़ने के लिए:

मैं भी उल्लेख होता है कि बजाय नेवला सीधे का उपयोग कर के (आप शायद यह इस तरह से आप इस पोस्ट पर खत्म उपयोग कर रहे हैं):

require('mongoose').model(...); 

आप वापस आ कनेक्शन का प्रयोग करेंगे:

var db = require('mongoose').connect('xxx', 'yyy'); 
db.model(...); 
0

आप दूसरी बार डिफ़ॉल्ट कनेक्शन (जो अभी तक बंद नहीं है) खोलने का प्रयास कर रहे हैं।

बजाय निम्नलिखित

var db = require('mongoose'); //note only one 'require' needed. 
var connectionToDb1 = db.createConnection('my.db1.ip.address', 'my-db1'); 
var connectionToDb2 = db.createConnection('my.db2.ip.address', 'my-db2'); 
2

मेरी परीक्षण चलाने के दौरान मैं इस मुद्दे को मिलता है।

यही वह है जिसे मैंने हल करने के लिए किया था।

//- in my app.js file. 
 
try { 
 
    mongoose.connect('mongodb://localhost/userApi2'); //- starting a db connection 
 
}catch(err) { 
 
    mongoose.createConnection('mongodb://localhost/userApi2'); //- starting another db connection 
 
}

+2

में मैं हूं अभी भी इस विधि का उपयोग कर, और यह काम करता है! किसी को टिप्पणी करना चाहेंगे कि डाउनवोट के बाद इसके बारे में क्या गलत है। – ArchNoob

+0

मैं प्रमाणित कर सकता हूं कि यह वास्तव में परीक्षण के लिए विशेष रूप से काम करता है – gbozee

0

mongoose.disconnect(fn) का उपयोग करना:

mongoose.disconnect(() => { 

    // here it would be possible "reset" models to fix 
    // OverwriteModelError errors 
    mongoose.models = {}; 

    // here comes your logic like registering Hapi plugins 
    server.register(somePlugin, callback); 
}); 

मैं इस सवाल त्रुटि संदेश टाइपिंग मिल गया और मेरी समस्या के बावजूद थोड़ी अलग मेरा मानना ​​है कि यह Hapi उपयोग करने वालों के लिए उपयोगी हो सकता है। अधिक विशेष रूप से Hapi + rest-hapi + mocha

mocha--watch विकल्प के साथ चलते समय मैं दोनों का सामना कर रहा था: OverwriteModelError और Error: Trying to open unclosed connection errors

2

मैं इस समस्या mocha साथ इकाई परीक्षण कर रही थी।

समस्या आया क्योंकि beforeEach दो बार कहा जाता है जब मैं एक दूसरे टेस्ट गयी।

मैं इस कोड के साथ इस समाधान कर लिया है:

const mongoose = require('mongoose'); 
describe('Your test suite',() => { 
    beforeEach(() => { 
     if (mongoose.connection.db) { 
      return; // or done(); 
     } else { 
      // connect to mongodb 
    }); 

    describe('GET /some-path',() => { 
     it('It should...',() => { 

     }); 
    }); 

    describe('POST /some-path',() => { 
     it('It should...',() => { 

     }); 
    }); 
}); 

आशा है कि यह आप में मदद करता है!

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