Нужно ли вручную закрывать соединение мангуста?

Новое в Node, Mongoose и Mongodb - не прочитали исходный код...

У меня есть приложение Node, которое открывает файл, анализирует строки в записях и сохраняет записи в mongodb. Записи - это объекты модели Mongoose, и для сохранения их в mongodb все, что я делаю, вызывает метод save на них.

Итак, теперь меня беспокоит связь, с которой mongoose управляет db = mongoose.connect(url). Нужно ли вручную закрыть его? Если да, то когда я должен закрыть его (поскольку все происходит как асинхронно, трудно сказать, когда закрыть соединение)?

Кажется, что мангуста не только поддерживает соединение открытым, но и поддерживает мой script от завершения. Могу ли я безопасно закрыть соединение mongoose после того, как я назвал save на всех моих объектах? В противном случае, учитывая асинхронный характер сохранения, было бы трудно точно узнать, когда вы завершите соединение.

Ответ 1

Вам нужно позвонить mongoose.disconnect(), чтобы закрыть соединение, но вам также нужно подождать, пока все вызовы save не завершат их асинхронная работа (т.е. называемая их обратным вызовом), прежде чем делать это.

Так что либо сохраняйте простой счет того, сколько еще осталось выдающимся, чтобы отслеживать или использовать инфраструктуру управления потоком, например async, чтобы что-то сделать немного более элегантным.

Ответ 2

Вы должны закрыть соединение mongoose, когда происходит сигнал Node POSIX. Процесс SIGINT запускается при нажатии Ctrl-C на терминале или выключения сервера.

Другим возможным сценарием является закрытие соединения при потоковой передаче данных. В любом случае рекомендуется подключаться при запуске и отключать при выключении.

Это код для отключения по сигналу SIGINT.

// If the Node process ends, close the Mongoose connection
process.on('SIGINT', function() {
  mongoose.connection.close(function () {
    console.log('Mongoose disconnected on app termination');
    process.exit(0);
  });
});