如何重用开放的猫鼬连接?

时间:2014-03-08 10:31:32

标签: javascript node.js mongodb mongoose

我想创建一个简单的mongoose连接并重用相同的连接来插入模型的多个实例。我可以这样做还是需要创建多个连接?我收到以下错误:

Error: Trying to open unclosed connection.
    at NativeConnection.Connection.open (/Users/me/Development/Node/tennistracker/node_modules/mongoose/lib/connection.js:210:15)

代码:

function(err, resp, body) {

            var db  = mongoose.connect('mongodb://localhost/forumposts');
            var MTF = db.model('ForumPost', ForumPost);

            $ = cheerio.load(body);
            $("[id*=post]").each(function(i, elem){

                var title =$(elem).find('a strong');
                if(!$(title).text().match(/livescores/i)) {

                    var forum = $(elem).find('td.thead > span > a').text();
                    console.log('Forum: '+normalizeWS(forum));
                    title = $(title).text();
                    utils.log('Title: '+normalizeWS(title));
                    var post = $(elem).find('div > em');
                    post = $(post).text();

                    utils.log('Post: '+normalizeWS(post));

                    var MTFPost = new MTF();

                    MTFPost.author = 'author';
                    MTFPost.forum  = normalizeWS(forum);
                    MTFPost.body   = normalizeWS(post);
                    MTFPost.title  = normalizeWS(title);

                    MTFPost.save(function (err) {
                        if(err) {
                            console.log(err);
                        }
                    });                }

            });
            callback(null, 'done', callback);
        });

1 个答案:

答案 0 :(得分:1)

你应该在全球范围内拥有这种联系。

Mongoose实现connection pool,因此您不需要不应该尝试在每个方法中建立连接。

如果要将不同的模型实例关联到Schema实例,那么这应该不是问题。只需单独声明它们,如。

 var User1 = mongoose.model("User1", userSchema );
 var User2 = mongoose.model("User2", userSchema );

一切都会好的。

相信已经完成了这项工作。有关详细信息,请参阅文档中的Connections页面。