Correttamente connessione stretta di mangusta una volta il gioco è fatto
Domanda
sto usando mangusta in uno script che non è fatto per funzionare continuamente, e sto per affrontare quello che sembra essere una questione molto semplice ma non riesco a trovare una risposta; in poche parole, una volta che faccio una chiamata a qualsiasi funzione mangusta che invia richieste a MongoDB il mio esempio nodejs non si ferma mai e devo uccidere manualmente con, diciamo, Ctrl + C o Program.exit ().
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 di risultato. A parte questo, tutto funziona bene (ritrovamento, risparmio, ...).
Questo è esattamente lo stesso problema come questa persona, purtroppo non ha ricevuto alcuna risposta: https : //groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
Grazie
EDIT: ha accettato la risposta qui sotto in quanto è tecnicamente corretto, ma se qualcuno mai ha colpito ancora una volta questo problema, sembra che mangusta e / o il driver MongoDB in realtà non chiudere la connessione quando si chiede a se ci sono ancora domande esecuzione.
Non ricordo nemmeno la chiamata di disconnessione a tutti, non lo fa una volta query sono in esecuzione finito; solo scarti la chiamata, senza eccezione generata o qualcosa del genere, e mai realmente chiudere la connessione.
Quindi il gioco è fatto:. Assicurarsi che ogni query è stato elaborato prima di chiamare disconnessione () se si vuole che in realtà il lavoro
Soluzione
È possibile chiudere la connessione con
mongoose.connection.close()
Altri suggerimenti
L'altra risposta non ha funzionato per me. Ho dovuto usare mongoose.disconnect();
come indicato in questa risposta .
È 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();
Sto utilizzando la versione 4.4.2 e nessuna delle altre risposte lavorato per me. Ma aggiungendo useMongoClient
alle opzioni e di 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()
Si otterrà un errore se si tenta di chiudere / al di fuori di disconnessione del metodo. La soluzione migliore è quella di chiudere la connessione in entrambi callback nel metodo. Il codice fittizio è qui.
const newTodo = new Todo({text:'cook dinner'});
newTodo.save().then((docs) => {
console.log('todo saved',docs);
mongoose.connection.close();
},(e) => {
console.log('unable to save');
});
Probabilmente avete questo:
const db = mongoose.connect('mongodb://localhost:27017/db');
// Do some stuff
db.disconnect();
, ma si può anche avere qualcosa di simile:
mongoose.connect('mongodb://localhost:27017/db');
const model = mongoose.model('Model', ModelSchema);
model.find().then(doc => {
console.log(doc);
}
Non è possibile chiamare db.disconnect()
ma si può chiudere la connessione dopo lo si utilizza.
model.find().then(doc => {
console.log(doc);
}).then(() => {
mongoose.connection.close();
});