Node,Mongoose& Mongodb - 尚未阅读源代码......
我有一个Node应用程序,它打开一个文件,将行解析为记录并将记录保存到mongodb。记录是Mongoose模型对象,为了将它们保存到mongodb,我所做的只是在它们上调用save
方法。
所以现在我都担心mongoose正在管理db = mongoose.connect(url)
的连接。我需要手动关闭它吗?如果是这样,我何时应该关闭它(因为一切都发生异步,很难说什么时候关闭连接)?
似乎mongoose不仅保持连接打开,而且还使我的脚本不会终止。我在所有物体上调用save
后,可以安全地关闭猫鼬连接吗?否则,鉴于保存的异步性质,很难确切地知道何时关闭连接。
答案 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