Uchwyt utracony połączenie z mongo db z nodejs

Próbuję uzyskać „utracone połączenie” lub coś podobnego, gdy połączenie utracone między nodejs a serwerem mongodb. Używam natywnego sterownika i ma następujący kod

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

Brak limitu czasu lub błędu pojawia się po około 20 minutach i wstawianie jest zamrożone. Po tym otrzymałem komunikat „Błąd ... wstaw” z utratą połączenia.

Próbowałem ustawić socketTimeoutMS = 10000 i keepAlive = 1, na przykład, ale socketTimeoutMS wzrasta „timeout” ciągle po 10000 i nie uwzględnia ustawień keepAlive ani nawet zapytań do mongodb.

Również wtimeout działa tylko wtedy, gdy mamy połączenie z serwerem mongodb i ma długie zapytanie. Jeśli połączenie zostanie utracone, nie działa.

Jak więc uzyskać zdarzenie lub błąd, gdy straciłem połączenie? Lub zmniejszyć 20-minutowe zamrożenie zapytania?

questionAnswers(1)

yourAnswerToTheQuestion