clevertension
clevertension

Reputation: 7077

mongoose output the error "Error: connection closed"

I stumble upon a curious problem about mongoose connect the mongodb, it generate the detail errors as the following

    e:\Mentor_Resources\node\node_twitter_bootstrap>node app
Express server listening on port 3000
Trace: error occure when start to connect dbError: connection closed
    at e:\Mentor_Resources\node\node_twitter_bootstrap\server\module\word.js:14:
17
    at Connection.open (e:\Mentor_Resources\node\node_twitter_bootstrap\node_mod
ules\mongoose\lib\connection.js:201:5)
    at Db.open (e:\Mentor_Resources\node\node_twitter_bootstrap\node_modules\mon
goose\node_modules\mongodb\lib\mongodb\db.js:247:16)
    at Server.connect.connectionPool.on.server._serverState (e:\Mentor_Resources
\node\node_twitter_bootstrap\node_modules\mongoose\node_modules\mongodb\lib\mong
odb\connection\server.js:413:7)
    at EventEmitter.emit (events.js:115:20)
    at connection.on.connectionStatus (e:\Mentor_Resources\node\node_twitter_boo
tstrap\node_modules\mongoose\node_modules\mongodb\lib\mongodb\connection\connect
ion_pool.js:108:15)
    at EventEmitter.emit (events.js:91:17)
    at Socket.closeHandler (e:\Mentor_Resources\node\node_twitter_bootstrap\node
_modules\mongoose\node_modules\mongodb\lib\mongodb\connection\connection.js:401:
12)
    at Socket.EventEmitter.emit (events.js:88:17)
    at Socket._destroy.destroyed (net.js:364:10)

the code snippet of mongoose is:

var mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/word-sentence",function(err) {
    if(err)
        console.trace('error occure when start to connect db' + err);
});

i am sure the mongodb is open, and i restart mongodb for several times,but the error is still exist, so I reboot my Windows XP , and try again the problem disappear,everything is ok, so I want to know why?

Upvotes: 3

Views: 8599

Answers (2)

Eat at Joes
Eat at Joes

Reputation: 5019

This is a common problem when pooled connections in longer running applications return connection closed.

The mongoose documentation recommends adding keepAlive to the options object you pass into the connect function.

Here's an example (you can remove replset if you're not using this),

// include keep alive for closing connections,
// http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html
var mongoOptions =
{
    db: {safe: true},
    server: {
        socketOptions: {
            keepAlive: 1
        }
    },
    replset: {
        rs_name: 'myReplSet',
        socketOptions: {
            keepAlive: 1
        }
    }
};

mongoose.connect( YOUR_URI, mongoOptions );

mongoose.connection.on('error', function(err) {
    console.log('Mongo Error:\n');
    console.log(err);
}).on('open', function() {
    console.log('Connection opened');
});

Upvotes: 4

Amol M Kulkarni
Amol M Kulkarni

Reputation: 21649

mongoose.connect() Is not accepting any callback functions as you have use in your code i.e.your code snippet of mongoose:

var mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/word-sentence",function(err) {
    if(err)
        console.trace('error occurred, when attempted to connect db. Error: ' + err);
});

So, I recommend you to start with this:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/word-sentence');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  // yay connected!
});

Again you cannot expect any arguments in the callback from db.open('open', function cb(){})

I suggest to go through these quick start, mongoose docs - enlightens how you can jump into source code if some conflict is found in the docs & mongodb/mongoose close connection

Upvotes: 1

Related Questions