@ivanxpru
Начинающий верстальщик

Как закрывать и открывать коннект в mongodb?

app.get('/games',function(req, res){
    mongoClient.connect(function(err, client){
        var response = '<table>\n';
        const db = client.db("eshopdb");
        const collection = db.collection("games");

        if(err){
            console.error(err);
        }
        else {
            console.log("mongoClient.connect is OK");
        };
        collection.find().sort({title_eu: 1}).toArray(function(err, result) {
            if (err) throw err;
            var n = 0;
            each(result,function(docs){
                n++;
                response = response + '<tr><td>' + docs.title_eu + '</td><td><a href="/game/' + docs._id + '">' + docs._id + '</td></tr>\n';
                closeclient(n);
            });
            respnse = response + '</table>\n';
            res.send(response);

            function closeclient(n){
                if (n == result.length){
                    client.close();
                    console.log(n, result.length)
                    var n = 0;
                    console.log("mongoClient.connect is close");
                }
            }
        });   
    });
});


При первом запросе выводятся все документы из БД. Через функцию closeclient(n) я узнаю, что все документы выведены и закрываю коннект к mongodb. Если обновить страницу, то возникает ошибка, т.к. коннект закрыт, а новый не открывается. Если убрать closeclient(n) то ошибки нет. Но мне кажется, что нужно закрывать коннекты к БД после использования, а не копить их. Как правильно это реализовать?
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Gvald
Кодю
Закрытие и открытие коннета очень затратная по времени операция. Есть такая штука, как connection pool, по умолчанию это 100 вроде, так что открыли Коннект и держим его, чтобы пулл работал. Если запросов летит немного, можно уменьшить пул, скажем, до 50.
Ответ написан
Комментировать
@cubit
Разнопрограммист
Можете посмотреть вот это https://toster.ru/q/75102, если вам без разницы использовать mongodb driver или mongoose.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы