2014-01-21 89 views
5

我試圖在nodejs和mongodb服務器之間的連接丟失時發生「連接丟失」或類似情況。 我使用本地驅動程序,有以下代碼處理與nodejs的mongo數據庫丟失的連接

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

無超時或錯誤apear約20分鐘,插件凍結。之後,我得到「錯誤...插入」連接丟失錯誤。

例如,我試圖設置socketTimeoutMS = 10000和keepAlive = 1,但是socketTimeoutMS在10000之後不斷上升「timeout」事件,並且不考慮keepAlive設置甚至查詢到mongodb。

此外,只有當我們連接到mongodb服務器並具有長時間查詢時,wtimeout纔有效。如果連接丟失,則不起作用。

因此,當我失去連接時,如何獲得事件或錯誤?或者減少20分鐘查詢凍結?

回答

2

如果運行mongodb服務器進程,請運行此示例。 之後,如果您停止服務器進程,則會看到Error...close正在顯示。 爲「開」所有可能的事件功能,可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

搜索關鍵詞:節點宕機下線斷開重新連接檢測通知監視狀態(這個回答把我永遠找) –

+1

你知道這是在一個發射間歇性斷開/重新連接,還是僅在服務器脫機/無法訪問的情況下發生? – pospi