Я использую мангуст в сценарии, который не предназначен для непрерывной работы, и столкнулся с тем, что кажется очень простой проблемой, но я не могу найти ответ; Проще говоря, когда я выполняю вызов любой функции mongoose, которая отправляет запросы в mongodb, мой экземпляр 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 фактически не закрывают соединение, когда вы спрашиваете его, если все еще выполняются запросы.
Он даже не запоминает вызов разъединения, он не делает этого после завершения запросов; он просто отбрасывает ваш звонок без каких-либо исключений или что-то в этом роде и никогда не закрывает соединение.
Итак, у вас есть: убедитесь, что каждый запрос был обработан перед вызовом disnect (), если вы хотите, чтобы он действительно работал.
Ответы:
Вы можете закрыть соединение с
источник
Connection.close()
Другой ответ не работал для меня. Я должен был использовать,
mongoose.disconnect();
как указано в этом ответе .источник
Вы можете установить соединение с переменной, а затем отключить его, когда закончите:
источник
Я использую версию 4.4.2, и ни один из других ответов не работал для меня. Но добавление
useMongoClient
опций и помещение их в переменную, которую вы вызываете,close
казалось, сработало.источник
Вы получите ошибку, если попытаетесь закрыть / отключить за пределами метода. Лучшее решение - закрыть соединение в обоих обратных вызовах метода. Пустой код здесь.
источник
Как сказал Джейк Уилсон: вы можете установить соединение с переменной, а затем отключить ее, когда закончите:
или если внутри асинхронной функции:
иначе, когда я проверял это в моем окружении, у него есть ошибка.
источник
Вероятно, у вас есть это:
но вы также можете получить что-то вроде этого:
Вы не можете позвонить,
db.disconnect()
но можете закрыть соединение после его использования.источник