我需要手动关闭猫鼬连接吗?

时间:2013-10-15 01:17:27

标签: javascript node.js mongodb mongoose

Node,Mongoose& Mongodb - 尚未阅读源代码......

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

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

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

3 个答案:

答案 0 :(得分:15)

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

因此,要么保持一个简单的计数,以保持跟踪或使用像async这样的流量控制框架来执行更优雅的事情。

答案 1 :(得分:11)

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

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

这是断开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);
  });
});

答案 2 :(得分:3)

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

使用connection.close()

的简单示例

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