错误:使用mongoose连接MongoDb Atlas时出现queryTxt ETIMEOUT错误

26

我正在尝试将我的mongoose连接到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的Public DNS解决了错误!如果有人遇到此错误,请确保更改您的DNS。在这里提供一个链接here


两件事情:1. 今天(2020年5月14日)MongoDb Atlas非常缓慢(至少对我来说是这样)。当我写这篇文章时,我几乎无法访问该网站,所以也许不仅仅是你的问题,而是连接问题。2. 有一次我在白名单中列出了所有IP后遇到了类似的问题,所以我也将我的实际IP(例如:192.xxx.xxx...)列入白名单并解决了我的问题,所以你可以尝试这样做。 - Charles Poplar
我本以为这是他们的问题,但后来我把我的凭据给了朋友,他用也可以。我会尝试第二个方法并让你知道结果。顺便感谢你的帮助。 - Aajinkya Singh
1
谢谢,但事实证明这是我的网络问题。通过更改我在问题的编辑部分中提到的DNS解决了它。 - Aajinkya Singh
它在我的本地主机上工作正常,但是当我将我的应用程序部署到Heroku并运行它时,我收到错误信息“操作'users.insertOne()'在10000ms后超时”。我已经为群集中的所有IP进行了白名单处理。 - Bhupendra
感谢您添加DNS设置的编辑,它对我很有用! - Shubham J.
12个回答

45

出现错误是由于您的Node和npm版本,要消除这个错误,只需要通过进入“连接”并连接到应用程序来更改您的连接字符串

  1. 将版本更改为2.2.122或更高版本
  2. 复制该字符串并粘贴,然后尝试再次连接。 如下图所示: enter image description here

但问题是为什么?@Bilal - Wiki
2
@wiki 这有时是由于较低的节点和npm版本引起的。 - Bilal Khursheed
为什么会发生这种情况? - Rahul
@Rahul,如我之前所提到的,这是因为您的系统上安装了较低版本的Node。 - Bilal Khursheed

16

将DNS更改为8.8.8.8对我有用。

在更改我的DNS之前,我尝试重新安装mongoose,检查我的连接并关闭我的VPN。但这些都没有起作用。


此解决方案已包含在问题的编辑中。 - alvaro g
你救了我的一天。 - nikk3008
通过将IPV4 DNS更改为8.8.8.8并重新连接到互联网,这个问题得以解决。 - Rohit Parte
真不敢相信,这个方法居然奏效了!在 Mac 上:网络设置 > WiFi > 高级选项 > DNS > 8.8.8.8。 - podcastfan88

13

您需要在您的URL中添加&ssl=true,您完整的URL应该是这样的

mongodb+srv://<user>:<password>@********.mongodb.net/<db name>?authSource=admin&compressors=zlib&retryWrites=true&w=majority&ssl=true

1
哇,就是这样。为什么世界上会这样。谢谢! - AndrewLeonardi
ssl不应该为true,因为tls将为false。 "使用+srv连接字符串修饰符会自动为连接设置tls(或等效的ssl)选项为true。" [文档](https://docs.mongodb.com/manual/reference/connection-string/) - user12582392

10

要解决这个问题,请确保选择 Node 的旧版本 (2.2.12) 或更高版本。

输入图像描述

然后确保将您的 IP 地址添加到白名单中。

输入图像描述


9

只有从我的移动热点切换到光纤连接才起作用。我不知道这是怎么发生的,但它解决了问题。(附言:当连接到移动热点时,我已将IP列入白名单,因此排除了这种推理)


2
这个解决方案对我有用,我将连接从移动数据切换到WiFi,一切都神奇地正常工作了。有人知道这是什么原因吗? - Mekel Ilyasa
1
具有讽刺意味的是,那个起初不起眼的方法居然奏效了 :( - Mani
有没有办法让MongoDB连接使用WiFi工作? - Rohan Devaki
1
一样的问题,我使用移动热点总是超时,但是当我切换到家里的Wi-Fi时就可以了。我尝试再次使用热点,并将DNS更改为1.1.1.1,这次成功了...我猜测是ISP阻止了该域名或相关内容... - rickvian

2
我怀疑这些答案实际上可以归结为同一件事 - 网络需要重置。我刚刚有一个奇怪的经历 - 我在不同的端口上运行了两个不同的应用程序,但它们都访问同一个mongo实例。其中一个遇到了连接错误,另一个没有。我重新启动了电脑,然后两者都正常运行。
另一个导致这种情况的场景是我在mongoose调用周围没有使用async / await。

“网络必须被重置”是什么意思? - podcastfan88

1

我把 Wi-Fi 关掉再打开,就好了


一样的,伙计,一样的! - Dhanishtha

0

尝试将您的 DNS 更改为 Google DNS:

对于 Windows:

  1. 进入控制面板
  2. 搜索“网络和共享中心”
  3. 单击您的互联网或 WiFi
  4. 选择属性
  5. 搜索“Internet 协议版本 4(TCP/IPv4)”
  6. 在字段中输入以下内容:

enter image description here


-1
在我的情况下,问题出在数据库网络访问上。我应该选择当前的IP地址而不是允许从任何地方访问。

-1
请检查您的连接字符串。密码必须是编码后的,而不是明文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接