Я подключаюсь к базе данных MongoDB с помощью библиотеки mon goose.
После запуска mongoose.connect()
я создаю обработчик mongoose.connection.on('error')
.
После запуска приложения Я остановил службу MongoDB для имитации «события потери соединения». Сценарий выводит:
events.js:196
throw er; // Unhandled 'error' event
...
и мое приложение падает.
Обработчик on ('error') никогда не выполняется. Почему бы нет? Не в этом ли смысл этого обработчика событий: обрабатывать ошибки, которые выдает соединение MongoDB, чтобы избежать сбоя приложения?
Ожидаемое поведение: если соединение MongoDB потеряно, приложение пытается повторно подключиться бесконечно.
Что я делаю не так?
Вот мой полный код подключения:
function dbConnect() {
// Establish MongoDB connection
logger.debug(`Connecting to MongoDB database ${process.env.DB_SERVER}:${process.env.DB_PORT} database ${process.env.DB_DATABASE}...`)
// Set up connection string
const db_uri = `mongodb://${process.env.DB_USER}:${process.env.DB_PASS}@${process.env.DB_SERVER}:${process.env.DB_PORT}/${process.env.DB_AUTH_DATABASE}`
// Initiate connection:
mongoose.connect(db_uri, {
dbName: process.env.DB_DATABASE, // Connect to the specified database
useNewUrlParser: true, // Use new settings
useUnifiedTopology: true,
useCreateIndex: true,
autoIndex: process.env.DB_AUTO_INDEX, // Autoindex
reconnectTries: Number.MAX_VALUE, // Keep retrying forever (thanks https://stackoverflow.com/a/39684734/1502289 and https://stackoverflow.com/a/41923785/1502289)
reconnectInterval: 5000, // Time to wait between reconnection attempts
})
.then(() => {
logger.debug("MongoDB successful connection")
})
.catch((err) => {
logger.debug("MongoDB connection error", err)
})
const db = mongoose.connection
// Set up database event handlers:
db.on('error', function(err) { logger.error("Unable to connect to database. Error: " + err) } )
db.once('open', function() {
logger.debug('Mongoose database connection established.')
// Load common properties from database:
// ... [snip]
})
db.on('disconnected', function() {
logger.error('MongoDB disconnected. Attempting to reconnect...')
})
db.on('reconnected', function() { logger.debug('Mongoose reconnected.')})
}