使用 ngrok 创建隧道以连接到 MongoDB 本地数据库
Posted
技术标签:
【中文标题】使用 ngrok 创建隧道以连接到 MongoDB 本地数据库【英文标题】:Create a tunnel with ngrok to connect to MongoDB local db 【发布时间】:2020-04-30 03:34:30 【问题描述】:我想在两台计算机之间创建一个隧道。
计算机 1:前端(反应)
计算机 2:带有 MongoDB 本地数据库和 NodeJS 后端服务器的 API
我尝试使用 ngrok 在两台计算机之间创建隧道,以便我的合作伙伴可以测试/建立与 API 的连接。它不工作... ngrok 的安装已按照获取入门指南完成,没有问题。
我们做了什么:
在计算机 1 上创建 NodeJS 的副本。
在计算机 2 上,创建一个隧道以公开 MongoDB 端口 (27017):
ngrok http localhost:27017
-
修改计算机 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 上运行。我可以在本地启动 db 和应用程序。一切正常。 -> 隧道创建正常工作。如果我尝试创建一个端口为 3000 的隧道并在计算机 2 上运行 nodejs,我可以从计算机 1 发送请求并正常获取结果。
问题似乎在于我尝试直接连接到数据库的方式。
**** 已解决
问题是 MongoDB 使用 tcp 而不是 http,所以我唯一改变的就是创建一个隧道使用:
ngrok tcp 27017
【问题讨论】:
试试这个ngrok http 27017
,你需要暴露端口号27017才能在其他计算机上使用它。避免添加本地主机
我试过了,我得到了同样的错误原因:错误:连接ECONNREFUSED XX.XXX.XX.XXX:27017
【参考方案1】:
我自己解决了这个问题。
问题是 MongoDB 使用 tcp 而不是 http,所以我唯一改变的就是创建一个隧道使用:
ngrok tcp 27017
【讨论】:
以上是关于使用 ngrok 创建隧道以连接到 MongoDB 本地数据库的主要内容,如果未能解决你的问题,请参考以下文章
无法将 dialogflow webhook 链接到 ngrok 隧道
为啥我不能使用 serveo 而不是 ngrok 来隧道连接到托管在 EC2 服务器上的 mvc 应用程序以在 Twilio 上接收 SMS
使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL