2013-10-15 23 views
11

Nuovo per nodo, Mongoose & MongoDB - non hanno letto il codice sorgente ...Devo chiudere manualmente una connessione mangusta?

Ho un'applicazione di nodo che si apre un file, analizza le linee in record e salva i record da MongoDB. I record sono oggetti modello Mongoose e per salvarli su mongodb tutto ciò che faccio è richiamare il metodo save su di essi.

Quindi ora sono preoccupato per la connessione gestita da mangusta db = mongoose.connect(url). Devo chiuderlo manualmente? Se è così, quando dovrei chiuderlo (dato che tutto sta succedendo asincrono è difficile dire quando chiudere la connessione)?

Sembra che la mangusta non solo mantiene la connessione aperta, ma mantiene anche il mio script di terminazione. Posso chiudere in sicurezza la connessione mangusta dopo che ho chiamato save su tutti i miei oggetti? Altrimenti data la natura asincrona del salvataggio, sarebbe difficile sapere esattamente quando si interrompe la connessione.

risposta

14

Si ha bisogno di chiamare mongoose.disconnect() per chiudere la connessione, ma è anche necessario attendere che tutte le chiamate save hanno completato il loro lavoro asincrona (cioè chiamati loro callback) prima di farlo.

Quindi tenere un conteggio semplice di quanti sono ancora in sospeso per tenere traccia o utilizzare un framework di controllo del flusso come async per fare qualcosa di un po 'più elegante.

6

È necessario chiudere una connessione mangusta quando si verifica un segnale POSIX nodo. Il processo SIGINT viene attivato quando Ctrl-C è stato premuto sul terminale o su un arresto del server.

Un altro possibile scenario è chiudere una connessione quando viene eseguito uno streaming di dati. In ogni caso è più consigliato connettersi all'avvio e disconnettersi allo spegnimento.

Questo è il codice per la disconnessione su un segnale SIGINT.

// If the Node process ends, close the Mongoose connection 
process.on('SIGINT', function() { 
    mongoose.connection.close(function() { 
    console.log('Mongoose disconnected on app termination'); 
    process.exit(0); 
    }); 
}); 
+0

Spiacente, questo sta andando a lavorare per me, per favore vedi sopra. – hba

+0

Buoni consigli qui, evviva. – Spets

Problemi correlati