2012-01-11 12 views
78

Sto usando mangusta in uno script che non è pensato per funzionare continuamente, e sto affrontando quello che sembra essere un problema molto semplice, ma non riesco a trovare una risposta; semplicemente metto una volta che faccio una chiamata a qualsiasi funzione di mangusta che manda richieste a mongodb la mia istanza nodejs non si ferma mai e devo ucciderla manualmente con, ad esempio, Ctrl + c o Program.exit().Chiudi la connessione della mangusta quando hai finito

Il codice è più o meno in questo modo:

var mongoose = require('mongoose'); 

// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ? 
mongoose.connect('mongodb://localhost:27017/somedb'); 

// define some models 

// if I include this line for example, node never stop afterwards 
var MyModel = mongoose.model('MyModel', MySchema); 

Ho provato ad aggiungere le chiamate a mongoose.disconnect(), ma non ai risultati. A parte questo, tutto funziona bene (trovare, salvare, ...).

Questo è lo stesso problema esattamente come questa persona, purtroppo non ha ricevuto alcuna risposta: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

Grazie

EDIT: accettato la risposta qui sotto in quanto è tecnicamente corretto, ma se qualcuno mai colpito questo problema di nuovo, sembra che mangusta e/o il driver mongodb in realtà non chiudere la connessione quando lo si chiede se ci sono ancora query in esecuzione.

Non ricorda affatto la chiamata di disconnessione, non lo fa una volta terminata la ricerca; semplicemente scarta la chiamata senza eccezioni generate o simili e non chiude mai la connessione.

Quindi, ecco qua: assicurati che ogni query sia stata elaborata prima di chiamare disconnect() se vuoi che funzioni effettivamente.

+0

C'è un modo per farlo solo dall'importazione di un modello? nessuna delle risposte seguenti funziona: \ – Antoine

risposta

128

È possibile chiudere la connessione con

mongoose.connection.close() 
+14

Questo in effetti chiude la connessione. Tuttavia questa chiamata stava cancellando i contenuti nel mio database. Quando sono passato a mongoose.disconnect() tutto ha funzionato correttamente ei miei test di mocha hanno iniziato a funzionare correttamente nuovamente –

+1

Questo ha funzionato per me. Avevo solo bisogno di assicurarmi di averlo inserito nel callback corretto altrimenti probabilmente stava chiudendo la connessione prima che il salvataggio sul database avesse la possibilità di finire. Per essere onesti, sto ancora utilizzando un semplice script che si collega al db locale e salva un semplice oggetto utente di esempio. Nel callback a user.save() è dove chiamo mongoose.connection.close(). – FateNuller

+0

Come puoi vedere, queste risposte sono vecchie. Se stai usando _Mongoose 5.0.4_, [il metodo 'Connection.close()'] (http://mongoosejs.com/docs/api.html#connection_Connection-close) viene esportato solo, solo disponibile, quindi usalo . –

40

L'altra risposta non ha funzionato per me. Ho dovuto usare mongoose.disconnect(); come indicato in this answer.

+0

Questo è anche il preferito quando si abbatte un ambiente di test. –

+0

mongoose.disconnect() è meglio usare e un approccio logico. –

8

È possibile impostare la connessione a una variabile quindi scollegarlo quando si è fatto:

var db = mongoose.connect('mongodb://localhost:27017/somedb'); 

// Do some stuff 

db.disconnect(); 
+0

Nella mia situazione (testare Mongoose all'interno di Jest) questa è l'unica soluzione che ha funzionato –

+0

I do Model.update (..) con Mongoose all'interno di un ciclo for.È necessario chiudere la connessione dopo ogni aggiornamento? Il mio server deve gestire molti aggiornamenti e ha smesso di funzionare dopo un po '. – Pille

+0

La stessa risposta di seguito – DanFromGermany

1

Sto utilizzando la versione 4.4.2 e nessuna delle altre risposte ha lavorato per me. Ma aggiungere useMongoClient alle opzioni e metterlo in una variabile che si chiama close su sembrava funzionare.

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true }) 

//do stuff 

db.close() 
Problemi correlati