2013-03-29 11 views
38

To jest uproszczona wersja problemu, ale w zasadzie próbuję otworzyć 2 połączenia mongodów z mangustą i daje mi to "Próbuję otworzyć niezamknięte połączenie". błąd.Mangia Próbowanie otwarcia niezamkniętego połączenia

przykładowy kod:

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(); 

Każdy pomysł jak zrobić to działa?

+1

@NilsH: przypadek użycia: połączenia DB są określane przez plik konfiguracyjny z wykorzystaniem różnych sekcji dla różnych środowisk (prod, staging, dev) w celu utworzenia luźnego sprzężenia między aplikacją a środowiskiem, w którym działa.W dev wszystkie bazy danych są na localhost, dzięki czemu można łatwo zarządzać; w produkcji bazy danych są na osobnych maszynach z różnymi ustawieniami replikacji, itp. – robbrit

Odpowiedz

2

Aby dodać na Raghuveer odpowiedź:

Chciałbym również wspomnieć, że zamiast korzystać bezpośrednio mongoose (prawdopodobnie używasz to w ten sposób skończyć się na tym stanowisku):

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

byłoby użyć wracającego połączenia:

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

Próbujesz otworzyć domyślne połączenie (które nie zostało jeszcze zamknięte) po raz drugi.

wykonaj następujące czynności zamiast

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

mam ten problem podczas uruchamiania moich testów.

Oto, co zrobiłem, aby go rozwiązać.

//- 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

Jestem nadal używają tej metody i działa! Chciałbym, aby ktoś skomentował to, co jest nie tak po upadku. – ArchNoob

+0

Mogę potwierdzić, że to faktycznie działa specjalnie do testowania – gbozee

0

Korzystanie 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); 
}); 

Znalazłem to pytanie wpisując komunikat o błędzie i pomimo mój problem jest nieco inna wierzę, to może być przydatne dla osób korzystających Hapi. Dokładniej: Hapi + rest-hapi + mocha.

Po uruchomieniu opcji mocha z opcją --watch stanąłem naprzeciwko: OverwriteModelError i Error: Trying to open unclosed connection errors.

2

Miałem ten problem z testem jednostkowym z mocha.

Problem pojawił się, gdy dodałem drugi test, ponieważ beforeEach jest wywoływany dwa razy.

mam rozwiązać ten z tym kodem:

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...',() => { 

     }); 
    }); 
}); 

Nadzieję, że to pomaga!

Powiązane problemy