Behandle Verbindungsverlust zu mongo db von nodejs

Ich versuche "Verbindung verloren" oder etwas ähnliches zu bekommen, wenn die Verbindung zwischen NodeJS und Mongodb-Server verloren geht. Ich benutze einen nativen Treiber und habe folgenden Code

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!');
    });
});

Nach etwa 20 Minuten tritt kein Timeout oder Fehler auf, und der Einsatz wird eingefroren. Danach bekam ich "Fehler ... einfügen" mit Verbindungsfehler.

Ich habe versucht, beispielsweise socketTimeoutMS = 10000 und keepAlive = 1 zu setzen, aber socketTimeoutMS erhöht das "timeout" -Ereignis ständig nach 10000 und berücksichtigt keine keepAlive-Einstellungen oder sogar Abfragen an mongodb.

Außerdem funktioniert wtimeout nur, wenn eine Verbindung zum Mongodb-Server besteht und eine langfristige Abfrage vorliegt. Wenn die Verbindung unterbrochen wird, funktioniert dies nicht.

Also, wie kann ich ein Ereignis oder einen Fehler bekommen, wenn ich die Verbindung verloren habe? Oder das Einfrieren von 20 Minuten reduzieren?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage