Создайте туннель с ngrok для подключения к локальной базе данных MongoDB - PullRequest
0 голосов
/ 13 января 2020

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

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

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

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

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

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

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

ngrok http localhost:27017

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

Проблема в том, что когда мы пытаемся запустить приложение (npm start) на компьютере 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)]: {} }

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

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

**** РЕШЕНО

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

ngrok tcp 27017

1 Ответ

1 голос
/ 14 января 2020

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

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

ngrok tcp 27017
...