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

问题描述 投票:0回答:1

我有一个节点应用程序,每隔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()函数,这是否意味着数据库变量需要是全局变量?

node.js mongodb
1个回答
2
投票

正确识别后,您只需要创建一次数据库连接。因此,不是使用setInterval包装db连接创建,而是将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);
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.