使用ngrok创建隧道以连接到MongoDB本地数据库

时间:2020-01-13 12:04:37

标签: mongodb express ngrok

我想在两台计算机之间创建一条隧道。

计算机1:前端(反应)

计算机2:具有MongoDB本地数据库和NodeJS后端服务器的API

我试图使用ngrok在两台计算机之间创建隧道,以便我的伙伴可以测试/建立与API的连接。它不起作用... ngrok的安装已完全按照《入门指南》完成。

我们所做的:

  1. 在计算机1上创建NodeJS的副本。

  2. 在计算机2上,创建一个隧道以暴露MongoDB端口(27017):

ngrok http localhost:27017

  1. 在计算机1上修改MongoDB连接字符串以指定ngrok链接,使其看起来像:'mongodb:// username:pwd@xxxxxx.ngrok.io/dbname?authSource = admin',(而不是'mongodb:/ / username:pwd @ localhost:27017 / dbname?authSource = admin',

问题是:当我们尝试在计算机1上启动应用程序(npm start)时,它无法正常工作。

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端口创建隧道并在计算机2上运行nodejs,则可以从计算机1发送请求并正常获取结果。

问题似乎出在我尝试直接连接到数据库的方式上。

****已解决

问题是MongoDB使用tcp而不是http,所以我唯一要做的更改是使用以下命令创建隧道:

ngrok tcp 27017

1 个答案:

答案 0 :(得分:1)

我设法自己解决了这个问题。

问题是MongoDB使用tcp而不是http,所以我唯一要做的更改是使用以下命令创建隧道:

ngrok tcp 27017