Mongoose запрос в цикле (Mongoose Trying to open unclosed connection) — как это исправить?

Хочу в цикле добавить записи в бд. Но mongoose пишет что я не закрыл открытое соединение. Mongoose Trying to open unclosed connection. Как сделать, чтобы все это дело шло синхронно? То есть один цикл прошелся - соединение открылось закрылось и т.д.

Никак не пойму я это асинхронное программирование

app.get("/dobavit/", function(req, res) {
    for(var i=50; i>0; i--)
{
                InsertAXIXA("analitika",i,function(data){
            });
}
    res.end();
});


function InsertAXIXA(qwerty,page,callback){
    mongoose.connect('mongodb://localhost/gazprom')
    var parsedResults = [];

    var req = request('http://xxx.ru/'+qwerty+"?page="+page, function (error, response, html) {
        if (!error && response.statusCode == 200) {
            //  str = iconv.decode(html, 'utf-8');
            var $ = cheerio.load(html);
            $('.col-1 .col-first').each(function(i, element){
                var buf = $(this);
                var zagolovok = buf.children(0).children().children().eq(0).text();
                var previewText = buf.children(2).children().eq(0).text();
                var url = buf.children(0).children().children().eq(0).attr('href');
                var picUrl = buf.children(1).children().eq(0).children().children().eq(0).attr('src');
          

                var metadata = {
                    zagolovok:zagolovok,
                    previewText:previewText,
                    url:url,
                    typeOfnews:qwerty,
                    picUrl:picUrl,
                    qwerty:qwerty
                };
                var news =new News({
                    zagolovok: zagolovok,
                    previewText: previewText,
                    url:url,
                    picUrl:picUrl,
                    qwerty:qwerty
                    // created_at:Date.today()

                });
                news.save(function(err, news,affected){
               });
                parsedResults.push(metadata);
            });
            callback(parsedResults);
      
        }
        mongoose.connection.close()
    });
  • Вопрос задан
  • 3566 просмотров
Пригласить эксперта
Ответы на вопрос 1
icelaba
@icelaba
Знаю и умею всё
Совсем халявный способ решить вашу проблему это не открывать connection (и не закрывать) на каждый insert

не халявный делать вызов следующего insert из колбека предыдущего (но все равно НЕ надо открывать закрывать коннекшены)

еще способ обернуть mongoose вызовы, промисами например из библиотеки Q https://github.com/kriskowal/q и использовать reduce (и тут не стоит открывать закрывать коннекшн)

откройте коннекшн при старте сервера и не трогайте его :-)
Ответ написан
Ваш ответ на вопрос

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

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