Как убедиться, что Node.js продолжает работать после разрыва соединения с MonogDB?
У меня есть промежуточное программное обеспечение для обработки ошибок в 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 секунд. После повторного подключения возобновите все обычные операции.
РЕДАКТИРОВАТЬ: Ни одно из решений, опубликованных ниже, не работает для меня, за исключением доменов.