2012-08-22 65 views
0

用Node.js的(monogdb,快遞等模塊)工作 我不知道是否有數據庫連接,像如果我打開一個連接var db = mongoose.connect('mongo://localhost/members');那麼我可以db.on('close', function(){ /*do stuffs here*/})貓鼬方法。如何檢查monogdb數據庫連接

基本上,下面的函數完成從數據庫獲取用戶列表並在數據庫連接關閉時進行日誌記錄的工作。

因此,我需要if()中的一些內容來檢查數據庫連接,或者在關閉數據庫連接或無法獲取數據時進行日誌記錄。我嘗試if(docs != null)它似乎剛剛關閉。任何意見將不勝感激!

var logger = require('bunyan'); 

var log = new logger({ 
name: "loggings", 
streams: [ 
    { 
     level: 'error', 
     path: 'test.log', 
    } 
], 
serializers: { 
    err: logger.stdSerializers.err, 
} 

}); 

function(req, res){ 
memberModel.find(function(err, docs){ 
    if (/*connection is closed*/) { 
     res.render('users.jade', { members: docs });  
    }else{ 
      try { 
       throw new DatabaseError ("Error!"); 
      } catch (err){ 
       log.warn({err: err}, "Check database connection!"); 
      } 
     res.render('index.jade'); 
    }; 
}); 
}; 

回答

0

爲什麼要檢查數據庫連接關閉的位置?如果它在那個時候關閉,那麼文檔很可能是空的。我認爲檢查

if (!err) { 
    res.render('users.jade', { members : docs }); 
} else { 
    /* throw err, etc */ 

是一個合理的過程。

由於您想要在數據庫連接關閉時進行日誌記錄,爲何不將日誌記錄功能附加到Db的「關閉」事件?

如果我誤解,並檢查該連接的狀態是你真正想要的,那麼我建議你使用的特性打轉轉:

http://mongoosejs.com/docs/api.html#connection_Connection

(打「顯示代碼」按鈕)。連接的_closeCalled屬性看起來可能是你想要檢查的。

0

您可以使用貓鼬的活動,將讓火時,您的服務器斷開連接:

mongoose.connection.on('error', function (err) { 
    console.log('Mongoose default connection error: ' + err); 
    //HERE SERVE YOUR DISCONNECT WARNING PAGE AND LOGGER 
}); 

mongoose.connection.on('disconnected', function() { 
    console.log('Mongoose default connection disconnected'); 
    //HERE SERVE YOUR DISCONNECT WARNING PAGE AND LOGGER 

});