错误:使用 mongoose 连接到 MongoDb Atlas 时的 queryTxt ETIMEOUT
Posted
技术标签:
【中文标题】错误:使用 mongoose 连接到 MongoDb Atlas 时的 queryTxt ETIMEOUT【英文标题】:Error: queryTxt ETIMEOUT when connecting to MongoDb Atlas using mongoose 【发布时间】:2020-08-31 03:32:04 【问题描述】:我正在尝试将我的猫鼬与我的 MongoDB Atlas 集群连接起来。它目前没有数据库或任何东西,但每当我尝试时:
mongoose.connect( uri || 'mongodb://localhost/test',options)
.then(()=>
console.log("Connected to the Database. Yayzow!");
)
.catch(err =>
console.log(err);
);
我收到这条消息:
Error: queryTxt ETIMEOUT cluster0-ghis2.mongodb.net
at QueryReqWrap.onresolve [as oncomplete] (dns.js:202:19)
errno: 'ETIMEOUT',
code: 'ETIMEOUT',
syscall: 'queryTxt',
hostname: 'cluster0-ghis2.mongodb.net'
我的依赖:
"dependencies":
"express": "^4.17.1",
"mongodb": "^3.5.7",
"mongoose": "^5.9.14"
我现在已将所有 IP 列入白名单 (0.0.0.0/0)。此外,我已确保我的防火墙已断开连接,我的防病毒软件也是如此。我让我的朋友也检查了一下,它确实对他有用,但对我没有用
感谢任何帮助!
编辑
通过将我的 DNS 更改为 Google 的公共 DNS 解决了错误! 如果有人收到此错误,请确保更改您的 DNS。 抛出相同here的链接
【问题讨论】:
两件事:1.今天(14/05/2020)MongoDb Atlas 非常慢(至少对我来说)。在我写这篇文章时,我几乎无法访问该网站,所以也许不仅仅是你,而是连接问题。 2.一旦我将所有IP列入白名单后遇到类似问题,我也将我的实际IP(例如:192.xxx.xxx ...)列入白名单并解决了我的问题,所以尝试这样做。 即使我认为这是他们的问题,但后来我给了我的朋友我的凭据,这对他有用。我会尝试第二个,然后告诉你。顺便感谢您的帮助 谢谢,但事实证明这是我的网络问题。通过更改我的问题的编辑部分中提到的 DNS 来解决它。 它在本地主机中为我工作,但是当我将我的应用程序部署到 Heroku 并运行它时,我收到错误“操作users.insertOne()
缓冲在 10000 毫秒后超时”。已将集群的所有 IP 列入白名单
感谢您为 DNS 设置添加编辑,它对我有用!
【参考方案1】:
由于你的node和npm版本的错误, 要消除此错误,您只需转到 Connect 并连接到 Application 来更改连接字符串
-
将版本更改为 2.2.122 或更高版本
复制字符串并粘贴,然后再次尝试连接。
如图所示
【讨论】:
但问题是为什么? @比拉尔 @wiki 这有时会因为较低的节点和 npm 版本而发生 为什么会这样 @Rahul 如上所述,这是因为您的系统上安装了较低版本的节点【参考方案2】:您需要在您的网址中添加&ssl=true
,您的完整网址应如下所示
mongodb+srv://<user>:<password>@********.mongodb.net/<db name>?authSource=admin&compressors=zlib&retryWrites=true&w=majority&ssl=true
【讨论】:
哇,原来如此。为什么在世界上。谢谢! ssl 不应为真,因为 tls 将为假。 "使用 +srv 连接字符串修饰符自动将连接的 tls(或等效的 ssl)选项设置为 true。" Docs【参考方案3】:要解决此问题,请确保选择旧版本的节点(2.2.12)或更高版本
然后确保将您的 IP 地址添加到白名单中
【讨论】:
【参考方案4】:将 DNS 更改为 8.8.8.8 对我有用。
在更改我的 DNS 之前,我尝试重新安装 mongoose,检查我的连接,然后关闭我的 ***。他们都没有工作。
【讨论】:
此解决方案包含在问题的编辑中。 你拯救了我的一天 这通过将 IPV4 DNS 更改为 8.8.8.8 并重新连接到 Internet 来实现。 不敢相信,这成功了!在 Mac 上:网络设置 > Wifi > 高级 > DNS > 8.8.8.8【参考方案5】:只有从我的移动热点切换到光纤连接才有效。我不知道这是怎么发生的,它解决了这个问题。 (P.S. 我在连接移动热点时将我的 IP 列入白名单,所以这个推理被排除了)
【讨论】:
这个解决方案对我有用,我将连接从移动数据切换到 WiFi,一切都神奇地工作。有谁知道这是什么原因? 具有讽刺意味的是,这有效:(【参考方案6】:我怀疑其中几个答案确实归结为同一件事 - 需要重置网络。我只是有一个奇怪的经历——我不得不在不同的端口上运行不同的应用程序,但都访问同一个 mongo 实例。一个有连接错误,另一个没有。我重新启动了,两者都很好。
导致这种情况的另一种情况是我在 mongoose 调用周围没有 async / await 的实例。
【讨论】:
“必须重置网络”是什么意思?【参考方案7】:请检查您的连接字符串。密码必须是编码的,而不是纯文本。
【讨论】:
【参考方案8】:就我而言,问题出在数据库网络访问中。我应该选择我当前的 IP 地址而不是 ALLOW ACCESS FROM ANYWHERE
【讨论】:
【参考方案9】:确保您的连接 URL 正常。在 .env 文件(一个用于环境变量)中,删除连接字符串周围的双引号。 留着它: URL = mongodb+srv://........
【讨论】:
以上是关于错误:使用 mongoose 连接到 MongoDb Atlas 时的 queryTxt ETIMEOUT的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Mongoose 连接到 MongoDB Atlas
mongoose.connect 在连接到 mongodb 后不调用回调
无法使用带有 X509 用户的 mongoose 连接到 Mongo DB