Лучший способ обработать 'MongoError: не удалось подключиться к серверу при первом подключении' в Mongoose
В этом выпуске GitHub для mongoose разработчик заявил, что он намерен аварийно завершить процесс Node.js в случае сбоя при первоначальном подключении базы данных к MongoDB. Это делается вместо того, чтобы пытаться восстановить соединение.
В моем коде я улавливаю эту ошибку, потому что я хочу записать ее.
var mongooseOptions = {
useMongoClient: true,
reconnectInterval: 10000,
reconnectTries: Number.MAX_VALUE
};
mongoose.connect(connectionString, mongooseOptions)
.catch(err => {
logger.error('Mongodb first connection failed: ' + err.stack);
// what to do here? - process.exit(0); maybe?
});
Но после этого, что лучше всего делать? сбить процесс? или напишите мою собственную логику переподключения? Я, возможно, должен упомянуть, что mongodb.service
указан как требование для node.service
начать (используя systemd в Linux).
[Unit]
After=mongodb.service
...
Я также не уверен, как часто я могу ожидать, чтобы это произошло.
Я также использовал это руководство, но не могу найти четкого ответа.
1 ответ
Я также ищу ответ на ваш вопрос. Пока что в моем поиске я считаю, что вызов process.exit - лучший способ perahps. Потому что Mongoose позволяет вам начать использовать ваши модели немедленно, не дожидаясь, пока Мангуста установит соединение с MongoDB. Это потому, что mongoose буферизует вызовы функций модели внутри.
Начиная с версии 5.0.10 - Mongoose не будет выдавать никаких ошибок по умолчанию, если вы используете модель без подключения.
Если ваше соединение не может восстановить соединение, то ваше приложение думает, что оно выполняет операции модели через буфер, хотя на самом деле это не удастся.
Я видел, как разработчики добавили дополнительный URI Mongodb следующим образом:
mongoose.connect(URI1||URI2);
В конечном счете, вы захотите убедиться, что ваше приложение всегда сможет подключаться к базе данных, а не выполнять функции модели в буфере в бесполезном режиме.
Есть возможность отключить буферизацию, но я не уверен, как это повлияет на производительность.