问题描述
我在 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;
试试这个配置