【发布时间】:2014-01-08 11:57:05
【问题描述】:
我在 Express 中有一个错误处理中间件,它试图捕获所有传入的错误:
app.use(function(err, req, res, next){
console.error(err.stack);
res.status(500);
res.render('500.jade');
});
但由于某种原因,每当我关闭 mongod 进程时,我的应用程序就会崩溃并显示以下堆栈跟踪:
Error: failed to connect to [localhost:27017]
at null.<anonymous> (/<hidden>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:540:74)
at EventEmitter.emit (events.js:106:17)
at null.<anonymous> (/<hidden>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15)
at EventEmitter.emit (events.js:98:17)
at Socket.<anonymous> (/<hidden>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:478:10)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:415:13)
Process finished with exit code 8
我曾尝试使用以下配置,但对我没有帮助:
var options = {
server:{
auto_reconnect: true,
poolSize: 10,
socketOptions:{
keepAlive: 1
}
},
db: {
numberOfRetries: 10,
retryMiliSeconds: 1000
}
}
mongoose.connect(config.db, options);
您可能想知道“如果您的应用程序在没有数据库连接的情况下基本上不再运行,您为什么希望它运行?”。我不希望它崩溃并重新启动。 Supervisor 和 Forever 模块似乎在尝试一定次数后停止尝试重新连接,从而使您的应用程序处于崩溃状态。
理想情况下,当 MongoDB 崩溃时,我想向用户显示 500.jade 错误页面,同时服务器应该每 10 秒尝试重新连接到数据库。重新连接后,恢复所有正常操作。
编辑:下面发布的所有解决方案都对我有用,但域除外。
【问题讨论】:
标签: node.js mongodb error-handling express mongoose