2013-03-29 17 views
38

Questa è una versione semplificata del problema, ma in sostanza sto cercando di aprire 2 connessioni mongodb con mangusta e mi sta dando "Cercando di aprire una connessione non chiusa". errore.Mongoose Cercando di aprire la connessione non chiusa

Esempio di codice:

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

Qualsiasi idea di come farlo funzionare?

+1

@NilsH: use case: connessioni DB decise dal file di configurazione utilizzando diverse sezioni per diversi ambienti (prod, staging, dev) per creare un accoppiamento lento tra l'applicazione e l'ambiente in cui è in esecuzione.In dev tutti i database sono su localhost in modo che sia facile da gestire; nei database di produzione sono su macchine separate con diverse impostazioni di replica, ecc. – robbrit

risposta

2

Per aggiungere il Raghuveer risposta:

Vorrei anche ricordare che invece di utilizzare direttamente mangusta (probabilmente si sta utilizzando in questo modo si finisce su questo post):

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

Si potrebbe utilizzare la connessione ritornato:

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

Si sta tentando di aprire la connessione predefinita (che non è ancora stata chiusa) una seconda volta.

effettuare le seguenti operazioni invece

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

ottengo questo problema durante l'esecuzione i miei test.

Questo è quello che ho fatto per risolverlo.

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

I'm ancora usando questo metodo, e funziona! Vorrebbe che qualcuno commentasse cosa c'è che non va dopo il downvote. – ArchNoob

+0

Posso attestare che questo in realtà funziona soprattutto per i test – gbozee

0

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

Ho trovato questa domanda a digitare il messaggio di errore e nonostante il mio problema è un po 'diverso credo che potrebbe essere utile per coloro che utilizzano Hapi. Più precisamente Hapi + rest-hapi + mocha.

Quando si esegue mocha con --watch opzione stavo affrontando entrambi: OverwriteModelError e Error: Trying to open unclosed connection errors.

2

Ho riscontrato questo problema durante il test dell'unità con mocha.

Il problema si presenta quando ho aggiunto un secondo test perché beforeEach viene chiamato due volte.

Ho risolto questo con questo codice:

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

     }); 
    }); 
}); 

Spero che ti aiuta!

Problemi correlati