2013-03-29 17 views
38

Dies ist eine vereinfachte Version des Problems, aber im Grunde versuche ich 2 mongodb Verbindungen mit Mungo zu öffnen und es gibt mir "Versucht, nicht geschlossene Verbindung zu öffnen." Error.Mongoose Versucht, nicht geschlossene Verbindung zu öffnen

Codebeispiel:

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

Jede Idee, wie es funktioniert?

+1

@NilsH: Anwendungsfall: DB-Verbindungen, die über die Konfigurationsdatei mit verschiedenen Abschnitten für verschiedene Umgebungen (prod, staging, dev) festgelegt wurden, um eine lose Kopplung zwischen der Anwendung und der Umgebung herzustellen, in der sie ausgeführt wird.In dev sind alle Datenbanken auf localhost, so dass es einfach zu verwalten ist; in der Produktion Datenbanken sind auf separaten Rechnern mit verschiedenen Replikationseinstellungen, etc. – robbrit

Antwort

2

Um auf Raghuveer Antwort hinzufügen:

würde ich auch erwähnen, dass anstelle Mungo die Verwendung direkt (Sie verwenden wahrscheinlich es auf diese Weise, die Sie zu diesem Beitrag am Ende):

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

würden Sie die zurückgegebene Verbindung verwenden:

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

Sie versuchen, die Standardverbindung (die noch nicht geschlossen ist) ein zweites Mal zu öffnen.

gehen Sie wie folgt statt

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

ich dieses Problem bekommen, während meine Tests laufen.

Das habe ich getan, um es zu lösen.

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

Ich bin immer noch mit dieser Methode, und es funktioniert! Möchte jemand nach dem Downvote kommentieren, was falsch ist. – ArchNoob

+0

Ich kann bestätigen, dass dies speziell zum Testen funktioniert – gbozee

0

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

fand ich diese Frage die Fehlermeldung eingeben und trotz meines Problems ist ein bisschen anders Ich glaube, es für diejenigen mit Hapi nützlich sein könnte. Genauer gesagt Hapi + rest-hapi + mocha.

Beim Ausführen mocha mit --watch Option war ich beide konfrontiert: OverwriteModelError und Error: Trying to open unclosed connection errors.

2

Ich hatte dieses Problem Unit Test mit mocha zu tun.

Das Problem kam, als ich einen zweiten Test hinzugefügt, weil beforeEach zweimal aufgerufen wird.

Ich habe dies mit diesem Code gelöst:

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

     }); 
    }); 
}); 

Hoffen, dass es Ihnen helfen!

Verwandte Themen