Estoy usando mangosta en un script que no está destinado a ejecutarse continuamente, y me enfrento a lo que parece ser un problema muy simple, pero no puedo encontrar una respuesta; simplemente, una vez que hago una llamada a cualquier función de mangosta que envía solicitudes a mongodb, mi instancia de nodejs nunca se detiene y tengo que matarla manualmente con, por ejemplo, Ctrl + co Program.exit ().
El código se ve más o menos así:
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);
Intenté agregar llamadas a mongoose.disconnect () pero no al resultado. Aparte de eso, todo funciona bien (encontrar, guardar, ...).
Este es exactamente el mismo problema que esta persona, lamentablemente no recibió ninguna respuesta: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
Gracias
EDITAR: aceptó la respuesta a continuación, ya que es técnicamente correcta, pero si alguien alguna vez vuelve a encontrar este problema, parece que la mangosta y / o el controlador mongodb en realidad no cierra la conexión cuando se le pregunta si todavía hay consultas en ejecución.
Ni siquiera recuerda la llamada de desconexión, no lo hace una vez que las consultas terminan de ejecutarse; simplemente descarta su llamada sin lanzar ninguna excepción ni nada por el estilo, y nunca cierra la conexión.
Así que ahí lo tiene: asegúrese de que cada consulta se haya procesado antes de llamar a desconectar () si desea que realmente funcione.
Respuestas:
Puedes cerrar la conexión con
fuente
Connection.close()
método solo se exporta, solo está disponible, así que úselo .La otra respuesta no funcionó para mí. Tuve que usar
mongoose.disconnect();
como se indica en esta respuesta .fuente
Puede configurar la conexión a una variable y luego desconectarla cuando haya terminado:
fuente
Estoy usando la versión 4.4.2 y ninguna de las otras respuestas funcionó para mí. Pero agregar
useMongoClient
a las opciones y ponerlo en una variable a la que llameclose
parece funcionar.fuente
Recibirá un error si intenta cerrar / desconectarse fuera del método. La mejor solución es cerrar la conexión en ambas devoluciones de llamada en el método. El código ficticio está aquí.
fuente
Tal como dijo Jake Wilson: puede configurar la conexión a una variable y luego desconectarla cuando haya terminado:
o si está dentro de la función Async:
de lo contrario, cuando lo estaba revisando en mi entorno, tenía un error.
fuente
Probablemente tengas esto:
pero también puedes tener algo como esto:
no puede llamar
db.disconnect()
pero puede cerrar la conexión después de usarla.fuente