MongoDB没有关闭NodeJS应用程序的连接

时间:2018-03-04 17:42:02

标签: node.js mongodb

我有一个节点应用程序每隔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 ??

1 个答案:

答案 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);
  })
}