Назад | Перейти на главную страницу

Лучший способ справиться с ошибкой MongoError: не удалось подключиться к серверу при первом подключении в Mongoose

В этом Проблема с GitHub для мангуста разработчик заявил, что предполагается сбой процесса 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
...

Я также не уверен, как часто я могу ожидать, что это произойдет.

Я также использовал это руководство но я не могу найти четкого ответа.

Я тоже ищу ответ на ваш вопрос. До сих пор в моем поиске я считаю, что вызов process.exit - лучший метод. Потому что Mongoose позволяет вам сразу же начать использовать свои модели, не дожидаясь, пока мангуст установит соединение с MongoDB. Это потому, что мангуст буферизует вызовы функций модели внутри.

Начиная с Mongoose 5.0.10 - Mongoose не будет выдавать никаких ошибок по умолчанию, если вы используете модель без подключения.

Если ваше соединение не может повторно подключиться, ваше приложение думает, что оно выполняет операции модели через буфер, хотя на самом деле оно не работает.

Я видел, как разработчики добавляли дополнительный URI Mongodb следующим образом:

mongoose.connect(URI1||URI2);

В конечном итоге вы захотите убедиться, что ваше приложение всегда сможет подключаться к базе данных, а не выполнять функции модели в буфере безуспешно.

Есть возможность отключить буферизацию, но я не уверен, как это повлияет на производительность.