Правильно закрыть соединение Mongoose, как только вы закончите
Вопрос
Я использую Mongoose в сценарии, который не предназначен для постоянного бега, и я сталкиваюсь с тем, что кажется очень простой проблемой, но я не могу найти ответ; Проще говоря, как только я позвоню в любую функцию Mongoose, которая отправляет запросы на MongoDB My Encement Nodejs, никогда не останавливается, и я должен убить его вручную с помощью, скажем, Ctrl+C или Program.Exit ().
Код выглядит примерно так:
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);
Я попытался добавить вызовы в mongoose.disconnect (), но нет, чтобы результат. Кроме того, все работает нормально (поиск, сохранение, ...).
Это тот же вопрос, что и этот человек, к сожалению, он не получил никакого ответа: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
Спасибо
РЕДАКТИРОВАТЬ: Примите приведенный ниже ответ, так как он технически правильный, но если кто -либо снова возникнет в этой проблеме, кажется, что Mongoose и/или драйвер MongoDB на самом деле не закрывают соединение, когда вы спрашиваете, есть ли еще вопросы.
Он даже не помнит вызов отключения, он не делает это, как только заполняются запросы; Он просто отбрасывает ваш звонок без исключения или чего -либо подобного, и никогда не закрывает соединение.
Итак, у вас есть это: убедитесь, что каждый запрос был обработан перед вызовом Densonce (), если вы хотите, чтобы он действительно работал.
Решение
Вы можете закрыть связь с
mongoose.connection.close()
Другие советы
Другой ответ не сработал для меня. Я должен был использовать mongoose.disconnect();
Как указано в этот ответ.
Вы можете установить соединение с переменной, а затем отключить его, когда закончите:
var db = mongoose.connect('mongodb://localhost:27017/somedb');
// Do some stuff
db.disconnect();
Я использую версию 4.4.2, и ни один из других ответов не работал для меня. Но добавление useMongoClient
на параметры и помещение в переменную, которую вы называете close
Казалось, работал.
var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })
//do stuff
db.close()
Вы получите ошибку, если попытаетесь закрыть/отключиться за пределами метода. Лучшее решение - закрыть соединение в обоих обратных вызовах в методе. Фиктивный код здесь.
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');
});
Наверное, у вас есть это:
const db = mongoose.connect('mongodb://localhost:27017/db');
// Do some stuff
db.disconnect();
Но у вас также может быть что -то вроде этого:
mongoose.connect('mongodb://localhost:27017/db');
const model = mongoose.model('Model', ModelSchema);
model.find().then(doc => {
console.log(doc);
}
Вы не можете позвонить db.disconnect()
Но вы можете закрыть соединение после его использования.
model.find().then(doc => {
console.log(doc);
}).then(() => {
mongoose.connection.close();
});