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

È stato utile?

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();
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top