mongoose: Auto reconnect doesn't work properly

Mongoose 3.6.9 doesn’t seem to have working auto-reconnect. Here is my test case against a local MongoDB server which I kill to test Mongoose’s reconnection support:


//
// Program to query a local mongodb every second. This should auto-reconnect.
//
// Instructions: 
//
// 1) start mongod
// 2) npm i mongoose@3.6.9 && node reconnect-mongoose.js
// 3) kill mongod
// 4) after a short interval, restart mongod
//
// Mongoose (3.6.9) should auto-reconnect when mongod has restarted,
// but doesn't appear to.
//
/*
Sample output:

$ node reconnect-mongoose.js
mongodb query ok
mongodb query ok
mongodb query ok
mongodb query ok
(KILL mongodb in another term)
mongo connection error:  [Error: failed to connect to [localhost:27017]]
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
(START mongodb in another term)
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
mongodb query not ok
*/

var mongoose = require('mongoose')

mongoose.model('user', new mongoose.Schema({ username: String, email: String }))


var mongoUrl = "mongodb://localhost/mydb"

mongoose.connect(mongoUrl, function(err) {
  if (err) throw err
  var users = mongoose.model('user')
  mongoose.connection.on('error', function(e) {
    console.log("mongo connection error: ", e)

  })
  // Run a simple 'find' query every second
  setInterval(function() {
    users.findOne(function(err, collection) {
      if (err) {
        return console.log("mongodb query not ok")
      }
      console.log("mongodb query ok")
    })
  }, 1000)

})

About this issue

  • Original URL
  • State: closed
  • Created 11 years ago
  • Comments: 23 (6 by maintainers)

Most upvoted comments

This works on MS Azure VM. Auzre has annoying timeouts on ‘idle’ network connections, db instance hosted via Mongolab.

function initDb(options, callback) { var mongoOptions = { db: { safe: true }, server: { auto_reconnect: true, socketOptions: { keepAlive: 1 } }

};
mongoose.connect(options.conn_string, mongoOptions, callback);
// mongoose.set('debug',true)

}