错误:使用 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

无法连接到数据库 - Mongoose nestJS

节点/快速应用程序无法使用mongoose连接到Mongodb Atlas

mongoose没有连接到localhost