Подтвердить что ты не робот

Правильно закрыть соединение мангуста, как только вы закончите

Я использую mongoose в script, который не предназначен для непрерывного запуска, и я сталкиваюсь с тем, что кажется очень простой проблемой, но я не могу найти ответ; просто поставьте один раз, когда я делаю вызов любой функции 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

Спасибо

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

Он даже не помнит об отключении вызова вообще, он не делает этого, как только запросы завершены; он просто отбрасывает ваш вызов без каких-либо исключений или что-то в этом роде и никогда не закрывает соединение.

Итак, у вас есть это: убедитесь, что каждый запрос был обработан до вызова функции disconnect(), если вы хотите, чтобы он действительно работал.

4b9b3361

Ответ 1

Вы можете закрыть соединение с помощью

mongoose.connection.close()

Ответ 2

Другой ответ не помог мне. Мне пришлось использовать mongoose.disconnect();, как указано в этом ответе.

Ответ 3

Вы можете установить соединение с переменной, а затем отключить ее, когда вы закончите:

var db = mongoose.connect('mongodb://localhost:27017/somedb');

// Do some stuff

db.disconnect();

Ответ 4

Я использую версию 4.4.2, и ни один из других ответов не работал для меня. Но добавление useMongoClient к опциям и помещение его в переменную, которую вы вызываете close похоже, сработало.

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })

//do stuff

db.close()

Ответ 5

Вы получите ошибку, если попытаетесь закрыть/отключить за пределами метода. Лучшее решение - закрыть соединение в обоих обратных вызовах метода. Пустой код здесь.

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');
});

Ответ 6

Вероятно, у вас есть это:

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();
});