【问题标题】:Mongoose Trying to open unclosed connection (callback hell)Mongoose 试图打开未关闭的连接(回调地狱)
【发布时间】:2014-04-24 18:11:06
【问题描述】:

我想在数据库记录中添加一个循环。但是猫鼬写道,我没有关闭打开的连接。 Mongoose 试图打开未关闭的连接。如何使整个事情同步?它在我的代码中的回调地狱

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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    您实际上不需要在每个请求上打开/关闭连接(有关详细信息,请参阅here)。

    相反,您可以在应用启动时打开一次连接,然后在应用关闭时让它关闭。

    如果您让连接保持打开状态,您可以重复使用这些连接,而不是在每次调用该函数时都浪费时间/资源来建立一个新连接。

    【讨论】:

      【解决方案2】:

      在我看来,您正在尝试创建另一个连接而不关闭当前连接。所以,你可能想使用:

      createConnection() 而不是connect()

      在你的情况下,它看起来像这样:

      db = mongoose.createConnection('mongodb://localhost/mydb');
      

      【讨论】:

        【解决方案3】:

        我今天遇到了同样的错误,我找到的解决方案是,我们不应该在循环或代码中的任何地方调用 mongoose.connect 函数,这些函数一次又一次地被执行。

        所以我的例子是,我在应用程序的所有请求上做 mongoose.connect。

        app.all("*",function(){
            mongoose.connect();
        })
        

        您的代码有点类似于因为在循环中您正在调用函数并且在函数中您正在打开连接。

        谢谢

        【讨论】:

          猜你喜欢
          • 2017-04-06
          • 2013-03-20
          • 2022-09-23
          • 2017-05-08
          • 2017-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-07
          相关资源
          最近更新 更多