Лучший способ справиться с '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
...

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

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

2
задан 5 December 2017 в 16:14
1 ответ

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

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

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

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

mongoose.connect(URI1||URI2);

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

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

1
ответ дан 3 December 2019 в 12:34

Теги

Похожие вопросы