当前位置: 首页 > 知识库问答 >
问题:

节点。js mongodb正在关闭连接

秦楚
2023-03-14

我试图使用node.js与mongoDB和以下教程在http://howtonode.org/express-mongodb

打开连接的代码是

ArticleProvider = function(host, port) {
 this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {}));
 this.db.open(function(){});
};

但是我看不到任何连接被关闭。但当我看到mongo控制台上的日志时,我可以看到一些连接在一段时间后打开和关闭。

连接会自动关闭吗?当大量客户端尝试访问服务器时会有问题吗?应该在哪里关闭连接?

谢谢

图措

共有3个答案

惠洛华
2023-03-14

请记住将db.close放在最后一个执行的回调中,这样连接就会打开,直到所有回调都完成。否则,它会给出一个错误,如

/usr/local/lib/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
Error
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17)
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47)
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)
万俟嘉珍
2023-03-14

node mongodb native为Db对象提供了一种关闭方法,您可以通过调用它来关闭连接。

var that = this;
this.db.open(function(){
    // do db work here

    // close the connection
    that.db.close();
});

如果不关闭连接,事件循环将保持连接打开,进程不会退出。如果您正在构建一个不会终止进程的web服务器,则无需关闭连接。

有关节点mongodb native的更好参考,请访问https://github.com/mongodb/node-mongodb-native.

蒋权
2023-03-14

在该示例应用程序中,仅创建了一个ArticleProvider对象供应用程序在服务请求时共享。该对象的构造函数打开一个db连接,该连接在应用程序终止之前不会关闭(这很好)。

因此,你应该看到,每次启动应用程序时,你都会获得一个新的mongo连接,但无论有多少客户端访问服务器,都不会产生额外的连接。在你终止应用程序后不久,你会看到它的连接在mongo端消失。

 类似资料:
  • 我试图找出当我取下一个节点时丢失数据的原因。我有两个节点运行hazelcast 3.6应用程序的开发集群。HZ应用程序配置为有271个分区,我通过远程客户端向集群写入271个唯一密钥。我验证了数据在两个节点之间正确分布,并在另一个节点上存储和备份。 过了一段时间,我停止了对集群的写入,我只从集群中读取数据,然后我关闭了这个集群中的一个节点。在调用实例上的shutdown方法之前,我检查集群是否安全

  • 问题内容: 具有单个节点的集群: betwwen和有什么不一样 和 ? 从Java正常关闭节点/集群的推荐方法是什么? 问题答案: 上述两个操作具有相同的效果。区别可能是它们影响的节点。 随着你关闭了自己的节点,从您的应用程序,它可以是你,如果你嵌入在应用程序中elasticsearch集群,或者只是一个客户端节点的唯一节点开始是通过Java API连接到外部集群(传输端口)。 使用节点关闭api

  • 我有一个独立的java应用程序,它可以获取消息流、批处理并使用Hikaricp将它们插入SQL Server数据库。 目前我所做的工作如下: 从池中获取连接 创建准备好的语句,以便使用连接插入 执行批插入 注意,我从不关闭连接!一旦我达到maxPoolsize(20),当我试图获得一个新的连接时,我会得到一个错误。 每次批量插入后是否应关闭连接? 从池中获取连接 创建准备好的语句,以便使用连接插入

  • 我正在尝试使用Springboot反应式webclient进行HTTP调用。远程服务器错误导致连接关闭。 请查找以下使用Webclient进行rest调用的代码。 Webclient创建的代码: 第一次通话后,我收到以下日志: 当我在一段时间后(比如10分钟)拨打电话时,连接将变为非活动状态。我正在获取以下日志: 我发现连接没有正确返回到池。配置中是否缺少任何内容?我是否已正确关闭连接?我想这应该

  • 我们有一个带有3个节点的ignite集群,所有服务都使用java瘦客户机连接到集群。 理想情况下,我们希望它回退到其他节点,因为集群中有其他节点可用。我们看到上面提到的逻辑是在ReliableChannel类的service方法中实现的。 在对象构造过程中没有实现回退而只在服务方法上有它(连接到其他节点的任何选项)有什么具体的原因吗? 还有,我们可以控制节点连接的顺序吗? ReliableChan

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)