我有一个节点应用程序每隔10秒调用一次mongoDB,但查看终端中的输出,连接只是不断计数,似乎永远不会关闭:
我的代码每10秒点击一次ddb:
const MongoClient = require("mongodb").MongoClient
setInterval(function(){
MongoClient.connect(uri, (err, client) => {
if (err){
console.log(err);
}
database = client.db(databaseName)
getData(function(data){
if(data.length > 0){
db_response = data;
params["fieldA"] = db_response[0]['fieldA'];
}
})
})
}, 10000)
function getData(callback){
var query = { fieldA: "foo" };
database.collection(CollectionName).find(query).toArray(function(err, result){
if (err){
throw err;
}
callback(result);
})
}
(vars uri,CollectionName和databaseName是先前声明的)我想我需要做什么(并且还没想到)是在服务器启动时连接到DB一次,然后运行getData()函数成功连接,这是否意味着数据库变量需要是全局var ??
答案 0 :(得分:2)
正确识别后,您只需要创建一次数据库连接。因此,不是使用setInterval
包装数据库连接创建,而是将setInterval
包裹在您想要重复的唯一函数周围,在这种情况下getData
。
在另一个问题上,数据库变量不需要全局,但你是对的getData
确实需要使用它。因此,将它作为参数与您的回调函数一起传递。
如果您想关闭联系,请使用client.close();
MongoClient.connect
const MongoClient = require("mongodb").MongoClient
MongoClient.connect(uri, (err, client) => {
if (err){
console.log(err);
}
const database = client.db(databaseName);
setInterval(function(){
getData(database, function(data){
if(data.length > 0){
db_response = data;
params["fieldA"] = db_response[0]['fieldA'];
}
})
}, 10000)
})
function getData(db, callback){
var query = { fieldA: "foo" };
db.collection(CollectionName).find(query).toArray(function(err, result){
if (err){
throw err;
}
callback(result);
})
}