Как исправить ошибку mongoDB/node.js “MongoTimeoutError: время выбора сервера истекло после 30000 мс”

Вопрос или проблема

Пожалуйста, помогите исправить mongoDB/node.js

events.js:174
  throw er; // Необработанное событие 'error'
  ^

MongoTimeoutError: Время ожидания выбора сервера истекло после 30000 мс
    at Timeout.setTimeout (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:878:9)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
Сгенерировано событие 'error' в:
    at E:\Digital\PROJECT\digital-api\node_modules\mongojs\lib\database.js:36:16
    at err (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\operations\execute_operation.js:76:14)
    at executeCallback (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\operations\execute_operation.js:67:25)
    at err (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\operations\connect.js:192:23)
    at connectCallback (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\operations\connect.js:343:5)
    at topology.connect.err (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\operations\connect.js:471:14)
    at selectServer (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:258:11)
    at selectServers (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:412:25)
    at Timeout.setTimeout (E:\Digital\PROJECT\digital-api\node_modules\mongojs\node_modules\mongodb\lib\core\sdam\topology.js:877:7)
    at ontimeout (timers.js:436:11)
    [... строки соответствуют оригинальному трассировке стека ...]
    at Timer.processTimers (timers.js:223:10)

Я думаю, что проблема связана с вашей версией npm mongojs. В mongojs 3.3.3 есть ошибка.
У вас установлена mongojs 3.3.3.

Необходимо выполнить следующие шаги в терминале.

  1. rm -rf mongojs или npm uninstall mongojs
  2. npm install [email protected]

Ответ или решение

Для решения проблемы "MongoTimeoutError: Server selection timed out after 30000 ms" в Node.js с использованием MongoDB, которая может возникнуть по нескольким причинам, выполните следующие шаги:

  1. Проверка соединения с MongoDB:

    • Убедитесь, что сервер MongoDB запущен и доступен. Вы можете попробовать подключиться к нему с помощью клиента команды mongo или другого клиента, например, MongoDB Compass. Проверьте, что вы используете правильный URI (строку подключения).
  2. Проверка конфигурации подключения:

    • Убедитесь, что URI для подключения к MongoDB правильный. Пример URI: mongodb://username:password@host:port/database.
    • Если вы используете облачное решение, проверьте настройки брандмауэра и доступность вашего IP-адреса.
  3. Обновление mongojs:

    • Иногда проблема может быть связана с ошибками в библиотеках. Если вы подозреваете, что версия библиотеки mongojs имеет баг (как вы упомянули, версия 3.3.3), выполните следующие шаги в терминале:
      # Удалите текущую версию mongojs
      npm uninstall mongojs
      # Установите более стабильную версию
      npm install mongojs@2.4.0  # пример более стабильной версии
    • Убедитесь, что используете актуальную версию mongojs, так как в последующих версиях могут быть исправления.
  4. Настройки тайм-аута:

    • Попробуйте увеличить время тайм-аута. Это можно сделать, добавив параметр serverSelectionTimeoutMS в строку подключения:
      const mongojs = require('mongojs');
      const db = mongojs('mongodb://username:password@host:port/database?serverSelectionTimeoutMS=50000');
  5. Отладка и логирование:

    • Добавьте логирование в код для отслеживания ошибок подключения:
      db.on('error', err => {
      console.error('Database error:', err);
      });
  6. Проверка версии Node.js:

    • Убедитесь, что используемая версия Node.js совместима с версией mongojs, поскольку бывают конфликты с версией. Установите последнюю стабильную версию Node.js.
  7. Тестирование подключения:

    • Напишите простой скрипт, чтобы протестировать подключения к MongoDB:

      const mongojs = require('mongojs');
      const db = mongojs('mongodb://username:password@host:port/database');
      
      db.runCommand({ ping: 1 }, (err, res) => {
       if (err) {
           console.error('Could not connect:', err);
       } else {
           console.log('Successfully connected to MongoDB:', res);
       }
      });

Следуя этим шагам, вы должны быть в состоянии справиться с ошибкой тайм-аута и успешно подключиться к MongoDB из вашего Node.js приложения. Если проблема не решится, рассмотрите возможность проверки логов MongoDB для получения дополнительной информации о причинах сбоев соединения.

Оцените материал
Добавить комментарий

Капча загружается...