我正在使用mongodb
驱动程序从Node.js应用程序连接到MongoDB服务器。
假设我的应用程序崩溃,或者我呼叫process.exit()
,没有以前关闭连接 - 它是否保持打开状态?它会自动关闭吗?如果是这样,谁在乎呢? Node.js的? TCP / IP堆栈? MongoDB的? ...?并且:这是什么时候发生的?
如果点击<Ctrl>+<C>
会有所不同吗?
答案 0 :(得分:2)
答案是否。退出(或崩溃)时,数据库连接不会正常关闭。
为此,您应该使用类似于以下内容的
:// Create a function to terminate your app gracefully:
function gracefulShutdown(){
// First argument is [force], see mongoose doc.
mongoose.connection.close(false, () => {
console.log('MongoDb connection closed.');
});
});
}
// Ask node to run your function before exit:
// This will handle process.exit():
process.on('exit', gracefulShutdown);
// This will handle kill commands, such as CTRL+C:
process.on('SIGINT', gracefulShutdown);
process.on('SIGTERM', gracefulShutdown);
process.on('SIGKILL', gracefulShutdown);
// This will prevent dirty exit on code-fault crashes:
process.on('uncaughtException', gracefulShutdown);
也有一些程序包可以处理此行为,但这通常非常简单且易于实现。