Создайте туннель с ngrok для подключения к локальной базе данных MongoDB

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

Компьютер 1: интерфейс (React)

Компьютер 2: API с локальной базой данных MongoDB и внутренним сервером NodeJS

Я попытался использовать ngrok для создания туннеля между двумя компьютерами, чтобы мой партнер мог проверить / построить соединение с API. Это не работает ... Установка ngrok была произведена в соответствии с руководством по началу работы без проблем.

Что мы сделали:

  1. Создайте копию NodeJS на компьютере 1.

  2. На компьютере 2 создайте туннель для доступа к порту MongoDB (27017) с помощью:

ngrok http localhost:27017

  1. Измените строку подключения MongoDB на Компьютере 1, чтобы указать ссылку ngrok, чтобы она выглядела так: 'mongodb: // username: [email protected]/dbname? AuthSource = admin', (вместо 'mongodb: // username: pwd @ localhost: 27017 / dbname? authSource = admin ',

Проблема в том, что когда мы пытаемся запустить приложение (запуск npm) на Компьютере 1, оно не работает.

Error : The app tries to connect to the db but fails.
{ MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout [as _onTimeout] (C:\Users\marin\Documents\Code\Codecademy\Site\Travel-kit\node_modules\mongodb\lib\core\sdam\topology.js:897: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)
  name: 'MongoTimeoutError',
  reason:
   { Error: getaddrinfo ENOTFOUND http http:27017
       at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
     name: 'MongoNetworkError',
     errorLabels: [ 'TransientTransactionError' ],
     [Symbol(mongoErrorContextSymbol)]: {} },
  [Symbol(mongoErrorContextSymbol)]: {} }

-> Служба Mongo запущена на компьютере 2. Я могу запустить базу данных и приложение локально. Все нормально работает. -> Создание туннеля нормально работает. Если я попытаюсь создать туннель с портом 3000 и запустить nodejs на Компьютере 2, я могу отправить запрос с Компьютера 1 и получить результат в обычном режиме.

Проблема, похоже, в том, как я пытаюсь напрямую подключиться к БД.

**** РЕШЕНО

Проблема заключалась в том, что MongoDB использует tcp, а не http, поэтому единственное, что я изменяю, - это создание туннеля, используя:

ngrok tcp 27017

person Abk    schedule 13.01.2020    source источник
comment
попробуйте это ngrok http 27017, вам нужно открыть номер порта 27017, чтобы использовать его на другом компьютере. избегать добавления localhost   -  person Fahad Mahmood    schedule 13.01.2020
comment
Я пробовал, у меня такая же ошибка с причиной: Ошибка: подключите ECONNREFUSED XX.XXX.XX.XXX:27017   -  person Abk    schedule 14.01.2020


Ответы (1)


Мне удалось решить проблему самостоятельно.

Проблема заключалась в том, что MongoDB использует tcp, а не http, поэтому единственное, что я изменяю, - это создание туннеля, используя:

ngrok tcp 27017
person Abk    schedule 14.01.2020