是否在process.exit()上自动关闭了与MongoDB的连接?

时间:2016-05-02 09:29:01

标签: node.js mongodb

我正在使用mongodb驱动程序从Node.js应用程序连接到MongoDB服务器。

假设我的应用程序崩溃,或者我呼叫process.exit()没有以前关闭连接 - 它是否保持打开状态?它会自动关闭吗?如果是这样,谁在乎呢? Node.js的? TCP / IP堆栈? MongoDB的? ...?并且:这是什么时候发生的?

如果点击<Ctrl>+<C>会有所不同吗?

1 个答案:

答案 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);

也有一些程序包可以处理此行为,但这通常非常简单且易于实现。