22

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

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

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

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

4

3 回答 3

19

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

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

于 2013-10-16T13:25:30.197 回答
14

当发生 Node POSIX 信号时,您应该关闭猫鼬连接。当在终端上按下 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);
  });
});
于 2013-10-15T06:55:07.323 回答
3

JohnnyHK 说的是对的。也添加“SIGTERM”。

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

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

于 2014-03-09T22:47:20.860 回答