为什么 node.js 应用程序在一段时间后自动与 Atlas MongoDB 断开连接以及如何防止这种情况发生?

问题描述

我在 HEROKU 和 Atlas MongoDB 数据库集群上托管了 node.js 应用程序。 在节点应用程序中,我使用标准命令连接到这个数据库 mongoose.connect("mongodb+srv://user:password@cluster0.jzycr.mongodb.net/database?retryWrites=true&w=majority",{ useNewUrlParser: true,useFindAndModify: false,useUnifiedTopology: true });

我注意到问题,如果在几个小时内没有用户对应用程序的活动/没有请求,我的应用程序会自动从 Atlas db 断开连接,我使用 mongoose.connection.readyState 从日志中看到它,它等于 0(断开连接) .

即使使用选项 useUnifiedTopology: true 也是正常行为吗??我认为这个标志会自动重新连接到数据库。 即使有很长的空闲期,如何保持与数据库的永久连接?如果 mongoose.connection.readyState = 0 ,我应该在我的应用程序中使用计时器定期检查连接并再次手动重新连接吗?这个问题的最佳模式是什么?

解决方法

let dbOptions = {
    dbName: process.env.MONGO_DATABASE_NAME,useNewUrlParser: true,poolSize: process.env.MONGO_POOL_SIZE || 10,autoReconnect: true,reconnectInterval: 1000,reconnectTries: 10,};

mongoose.connect(process.env.MONGO_URI,dbOptions);
// Create connection object.
const db = mongoose.connection;

试试这个配置

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...