2015-07-21 225 views
0

我目前使用[email protected],無論何時我手動斷開MongoDb,mongoose斷開/重新連接事件都未被觸發糾正,重新連接事件被觸發且斷開連接在每次斷開MongoDb時都未被觸發/手動啓動。我的問題是處理MongoDb連接和斷開狀態,以便對服務器的每個請求我會看到MongoDb連接/斷開的狀態併發送適當的響應(可能是500代碼),因爲如果MongoDb不是連接的。 要查看這是否是版本問題,我聲明版本3.8.x並轉到4.0.4以查看事件正確觸發的位置。我能夠從4.0.x版捕獲重新連接事件,但不能斷開連接事件。 基本上想知道哪個版本我可以使用連接/斷開連接事件正確觸發或處理問題的方式。Mongoose斷開/重新連接問題

下面

是代碼處理事件

var db = mongoose.connection; 
var connected; 
db.on('open', function (ref) { 
    connected = true; 
    console.log('open connection to mongo server.'); 
}); 

db.on('connected', function (ref) { 
    global.mongo_conn=true; 
    console.log('Connected connection to mongo server.'); 
}); 

db.on('disconnected', function (ref) { 
    connected = false; 
    console.log('disconnected connection.'); 
}); 
db.on('disconnect', function (err) { 
    console.log('Error...disconnect', err); 
}); 
db.on('connecting', function (ref) { 
    connected = false; 
    console.log('connecting.'); 
}); 

db.on('close', function (ref) { 
    global.mongo_conn=false; 
    console.log('close connection.'); 
    connect(); 
}); 

db.on('error', function (ref) { 
    connected = false; 
    console.log('Error connection.'); 
    //mongoose.disconnect(); 
    global.mongo_conn=false; 
}); 

db.on('reconnected', function() { 
    global.mongo_conn=true; 
    console.log('MongoDB reconnected!'); 
}); 
db.on('reconnecting', function() { 
    global.mongo_conn=true; 
    console.log('reconnecting!'); 
}); 
function connect() { 
    mongoose.connect(config.mongo.uri, opts); 
} 

connect(); 
+0

你能告訴你使用捕捉各種事件代碼? – robertklep

+0

最後我把它發佈在GitHub mongoose的bug列表上,它會被髮布到MongoDB的下一個版本請看這裏https://github.com/Automattic/mongoose/issues/3183。 –

回答

0
mongoose.connect(url, 
    { 
     server: { 
     auto_reconnect: true, 
     reconnectTries: Number.MAX_VALUE, 
     reconnectInterval: 1000, 
     socketOptions: {keepAlive: 1, connectTimeoutMS: 30000} 
     } 
    } 
); 
+0

一些解釋的詞彙通常在堆棧溢出時被理解。 – mkl

+0

通常最好是解釋一個解決方案,而不是隻發佈一些匿名代碼行。你可以閱讀[我如何寫一個好的答案](https://stackoverflow.com/help/how-to-answer),以及[完全解釋基於代碼的答案](https://meta.stackexchange.com /問題/ 114762 /解釋-entirely-%E2%80%8C%E2%80%8Bcode基於-答案)。 –

相關問題