【问题标题】:Do I need to manually close a mongoose connection?我需要手动关闭猫鼬连接吗?
【发布时间】:2013-10-22 16:51:35
【问题描述】:

Node、Mongoose 和 Mongodb 新手 - 尚未阅读源代码...

我有一个 Node 应用程序,它打开一个文件,将行解析为记录并将记录保存到 mongodb。这些记录是 Mongoose 模型对象,为了将它们保存到 mongodb,我所做的就是在它们上调用 save 方法。

所以现在我很担心猫鼬正在管理db = mongoose.connect(url) 的连接。我需要手动关闭它吗?如果是这样,我应该什么时候关闭它(因为一切都是异步发生的,所以很难说什么时候关闭连接)?

似乎 mongoose 不仅保持连接打开,而且还阻止我的脚本终止。在我对所有对象调用save 后,我可以安全地关闭猫鼬连接吗?否则,鉴于保存的异步性质,很难确切知道何时关闭连接。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您确实需要调用mongoose.disconnect() 来关闭连接,但您还需要等到所有save 调用都完成它们的异步工作(即调用它们的回调)后再执行此操作。

    所以要么简单地计算有多少仍然未完成以进行跟踪,要么使用像 async 这样的流控制框架来做一些更优雅的事情。

    【讨论】:

      【解决方案2】:

      当发生 Node POSIX 信号时,您应该关闭 mongoose 连接。 SIGINT 进程在终端上按下 Ctrl-C 或服务器关闭时触发。

      另一种可能的情况是在数据流完成时关闭连接。无论如何,更建议在启动时连接并在关闭时断开连接。

      这是断开 SIGINT 信号的代码。

      // If the Node process ends, close the Mongoose connection
      process.on('SIGINT', function() {
        mongoose.connection.close(function () {
          console.log('Mongoose disconnected on app termination');
          process.exit(0);
        });
      });
      

      【讨论】:

      • 对不起,这对我有用,请见上文。
      【解决方案3】:

      JohnnyHK 所说的是正确的。也添加“SIGTERM”。

      使用connection.close()的简单示例

      https://gist.github.com/pasupulaphani/9463004#file-mongoose_connet-js

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 2015-02-04
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        相关资源
        最近更新 更多