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

StackOverflow https://stackoverflow.com/questions/8813838

  •  26-10-2019
  •  | 
  •  

Вопрос

Я использую 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();
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top