2014-01-21 6 views
5

Ich versuche, "Verbindung verloren" oder etwas ähnliches, wenn die Verbindung verloren zwischen NodeJs und Mongodb-Server. Ich benutze nativen Treiber und hat folgenden CodeHandle verlorene Verbindung zu Mongo Db von Nodejs

var mongo = require('mongodb'); 
var server = new mongo.Server('host', 'port', { 
    auto_reconnect: true, 
    socketOptions: { 
     keepAlive: 10, 
     connectTimeoutMS: 1000, 
     socketTimeoutMS: 0 
    } 
}); 
var db = new mongo.Db(
    'dbname', 
    server, 
    { 
     w: 1, 
     wtimeout: 1000, 
     numberOfRetries: 100, 
     auto_reconnect: true 
    } 
); 

db.on('close', function() { 
    console.log('Error...close'); 
}); 
db.on('error', function (err) { 
    console.log('Error...error', err); 
}); 
db.on('disconnect', function (err) { 
    console.log('Error...disconnect', err); 
}); 
db.on('disconnected', function (err) { 
    console.log('Error...disconnected', err); 
}); 
db.on('parseError', function (err) { 
    console.log('Error...parse', err); 
}); 
db.on('timeout', function (err) { 
    console.log('Error...timeout', err); 
}); 

db.collection('collectionName',function(err, collection){ 
    if(err){ 
     console.log('Error...collection', err); 
     return; 
    } 

    // set breakpoint here and break connection to mongo db server 
    collection.insert({}, function (err, data) { 
     if (err) { 
      console.log('Error...insert', err); 
     } 
     console.log('Fine!'); 
    }); 
}); 

Kein Timeout oder Fehler apear etwa 20 Minuten und Einsatzfroren. Danach habe ich "Error ... insert" mit Verbindungsverlust erhalten.

Ich habe versucht, socketTimeoutMS = 10000 und keepAlive = 1 zum Beispiel, aber socketTimeoutMS Anstieg "Timeout" -Ereignis ständig nach 10000 und berücksichtigt nicht KeepAlive-Einstellungen oder sogar Anfragen an mongodb.

Auch wtimeout funktioniert nur, wenn wir Verbindung zum mongodb-Server haben und eine Langzeitabfrage haben. Wenn die Verbindung verloren geht, funktioniert es nicht.

Wie kann ich ein Ereignis oder einen Fehler erhalten, wenn ich den Anschluss verloren habe? Oder reduzieren Sie den 20-minütigen Abfrage-Freeze?

Antwort

2

Wenn der mongodb-Server-Prozess ausgeführt wird, führen Sie dieses Beispiel aus. Nachdem, wenn Sie den Serverprozess stoppen, sehen Sie Error...close wird angezeigt. Alle möglichen Ereignisse für die „on“ -Funktion kann found here

var MongoClient = require('mongodb').MongoClient; 

// Connect to the db 
MongoClient.connect('mongodb://localhost:27017/exampleDb', function(err, db) { 
    if(err) { 
    return console.dir(err); 
    } 
    console.log('We are connected'); 
    // db.close(); 
    db.on('close', function() { 
    console.log('Error...close'); 
    }); 
}); 
+2

durchsuchen Schlüsselwörter sein: Knoten Ausfallzeiten offline trennen Reconnect erkennen Monitor Status benachrichtigen (diese Antwort hat mich für immer zu finden) –

+1

Wissen Sie, ob dies während einer gebrannt zeitweise Trennen/Wiederverbinden, oder wenn es nur auftritt, wenn der Server offline/nicht erreichbar ist? – pospi