Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB mLab mongoose Node.js driver - connection timeout after a period of idle time?

I have a simple Node.js that uses mongoose to connect with Mongo database hosted on mLab.

Everything seems working just fine: adding new records, querying for existing stuff.

Only sometimes, after some period of inactivity, when I look at the console I see the following:

events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: connection timeout
    at Db.<anonymous> (___PATH___/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:168:17)
    at emitTwo (events.js:106:13)
    at Db.emit (events.js:191:7)
    at Server.listener (___PATH___/node_modules/mongodb/lib/db.js:1786:14)
    at emitOne (events.js:96:13)
    at Server.emit (events.js:188:7)
    at Server.<anonymous> (___PATH___/node_modules/mongodb/lib/server.js:274:14)
    at emitOne (events.js:96:13)
    at Server.emit (events.js:188:7)
    at Pool.<anonymous> (___PATH___/node_modules/mongodb-core/lib/topologies/server.js:334:12)
    at emitOne (events.js:96:13)
    at Pool.emit (events.js:188:7)
    at Connection.<anonymous> (___PATH___/node_modules/mongodb-core/lib/connection/pool.js:270:12)
    at Connection.g (events.js:292:16)
    at emitTwo (events.js:106:13)
    at Connection.emit (events.js:191:7)

Right now it doesn't matter that much to me - I can always restart the app. I'm worried that in production it will cause a lot of headaches so I preemptively ask what's the issue here?

Note that initially everything is working fine, it after some time when I get Error: connection timeout

like image 383
Mars Robertson Avatar asked Dec 20 '16 13:12

Mars Robertson


1 Answers

Sample Connection code for Mongo-Node using Mongoose

var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');

const options = {
    useMongoClient: true,
    reconnectTries: 5000,
    reconnectInterval: 0,
    socketTimeoutMS: 100000,
    connectTimeoutMS: 100000
  }

mongoose.connect(mongodb://........, options);
var db = mongoose.connection;

db.on('error', function (error) {
  console.log('Error while connecting to mongodb database:', error);
});

db.once('open', function () {
  console.log('Successfully connected to mongodb database');
});

db.on('disconnected', function () {
  //Reconnect on timeout
  mongoose.connect(mongodb://........, options);
  db = mongoose.connection;
});
like image 102
Vijay Patoliya Avatar answered Oct 03 '22 02:10

Vijay Patoliya