0

使用 Node.js(monogdb、express 和其他模块)我想知道是否有用于数据库连接的 mongoose 方法,比如如果我打开一个连接var db = mongoose.connect('mongo://localhost/members');,那么我可以db.on('close', function(){ /*do stuffs here*/})

基本上,下面的函数完成了从数据库获取用户列表并在数据库连接关闭时记录的工作。

所以我需要一些东西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');
    };
});
};
4

3 回答 3

0

您为什么要检查您所在的位置以关闭数据库连接?如果它在那时关闭,那么文档很可能为空。我认为检查

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

是一个合理的课程。

既然要在数据库连接关闭时记录,为什么不将记录功能附加到 Db 的“关闭”事件?

如果我误解并检查连接的状态是您真正想要的,那么我建议您使用以下属性:

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

(点击“显示代码”按钮)。连接的 _closeCalled 属性看起来可能是您要检查的内容。

于 2012-09-11T14:00:07.933 回答
0
var uri = 'mongodb://localhost/user1';
var promise = mongooose.connect(uri,{
    useMongoClient: true,
    });

promise.openUri(uri,function(errr,db){
    if(errr){
        throw errr;
    }else{
        console.log("Connection Successfull");                  
        glo_db = db;
    }
});

上面可能需要为较新版本的 mongoose 编写,如果在连接数据库时发现任何错误,则会抛出错误。 在这里检查

于 2018-03-23T19:08:27.880 回答
0

您可以使用 mongoose 事件,只要您的服务器断开连接就会触发:

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

});
于 2016-09-29T11:35:37.907 回答