2015-07-21 220 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基于-答案)。 –

相关问题