我想在数据库记录中添加一个循环。但是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()
});
答案 0 :(得分:4)
您实际上不应该在每次请求时打开/关闭您的连接(有关详细信息,请参阅here。)
相反,您可以在应用启动时打开一次连接,然后在应用关闭时关闭它。
如果保持连接处于打开状态,则可以重复使用连接,而不是每次调用该函数时都浪费时间/资源来建立新连接。
答案 1 :(得分:2)
在我看来,您正在尝试创建另一个连接而不关闭当前连接。所以,您可能想要使用:
createConnection()
代替connect()
。
在您的情况下,它看起来像这样:
db = mongoose.createConnection('mongodb://localhost/mydb');
答案 2 :(得分:0)
我今天遇到了同样的错误,我发现的解决方案是,我们不应该在循环中或在一次又一次执行的代码中的任何地方调用 mongoose.connect 函数。 / p>
所以我的例子是,我在app的所有请求上都在做mongoose.connect。
app.all("*",function(){
mongoose.connect();
})
您的代码有点类似于因为在循环中您正在调用函数,而在函数中您正在打开连接。
由于