Я хотел бы создать туннель между двумя компьютерами.
Компьютер 1: внешний интерфейс (React)
Компьютер 2: API с локальной базой данных MongoDB и NodeJS внутренний сервер
Я пытался использовать ngrok для создания туннеля между двумя компьютерами, чтобы мой партнер мог протестировать / построить соединение с API. Это не работает ... Установка ngrok была выполнена без каких-либо проблем, следуя руководству по началу работы.
Что мы сделали:
Создайте копию NodeJS на компьютере 1.
На компьютере 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