连接到 MongoDb Atlas 服务器时出错

Error at connecting to MongoDb Atlas Server

所以我目前正在编写一个 Web 应用程序,我需要数据库,所以我决定使用 mongodb 和猫鼬。到目前为止,我在 localhost 上测试了所有内容并且它有效但我想将数据移动到服务器。我听说过 Atlas 并注册了自己和 "uploaded" 数据。

现在我想通过 node.js 应用程序连接到集群。

mongoose.connect('mongodb+srv://engllucas:p%40ssw0rd@insight-quhku.mongodb.net/test');

我在连接您的应用程序

时获得了 mongodb Atlas 站点的字符串

然后我换了密码。

mongoose.connect('mongodb://engllucas:p%40ssw0rd@insight-quhku.mongodb.net/test');

这个也没用。

那是错误信息:

{ MongoError: failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]
at Pool.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\topologies\server.js:503:11)
at emitOne (events.js:115:13)
at Pool.emit (events.js:210:7)
at Connection.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\pool.js:326:12)
at Object.onceWrapper (events.js:318:30)
at emitTwo (events.js:125:13)
at Connection.emit (events.js:213:7)
at TLSSocket.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\connection.js:245:50)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at TLSSocket.emit (events.js:210:7)
at emitErrorNT (internal/streams/destroy.js:64:8)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
  name: 'MongoNetworkError',

留言:'failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]'} (节点:4920)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 ID:1):MongoNetworkError:首次连接时无法连接到服务器 [insight-shard-00-02-quhku.mongodb.net:27017] [MongoNetworkError: connect ECONNREFUSED 18.194 .163.64:27017] (节点:4920)[DEP0018] DeprecationWarning:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。

如果您使用的是 5.0.15 之前的版本:

mongodb+srv:// uri 对底层本机驱动程序无效

仅删除 +srv 也不起作用,因为 uri 需要包含您的副本主机和 replicaSet/authSource 参数。

你可以

1.升级到 mongoose 5.0.15 并使用更短的 +srv 格式

2。将当前版本与 Atlas 集群仪表板中的完整 uri 一起使用,select使用旧驱动程序(请参阅下面的 注意version uri .

从您的集群仪表板,按连接按钮,然后(假设您已将节点服务器的 IP 列入白名单)select "connect your application",然后按 "I am using 3.4 driver or older"。使用生成的 uri 字符串替换您的密码。

注意: 在 Atlas 集群仪表板上的连接助手中选择 URI 字符串的对话框中,它说 "I am using driver 3.* or (newer|older)"。这是一个糟糕的选择,因为 3.6 和 3.4 不是指驱动程序版本,而是指服务器版本。此外,使用一个或另一个版本的服务器与用于连接的驱动程序无关,这是确定要使用哪个版本的 URI 的实际依赖关系所在。

我也有类似的问题,我可以通过在集群 -> 安全 -> IP 白名单下添加我的 IP 地址白名单来解决这个问题。不要单击 my current ip address,只需在 google 上搜索我的 ip 并粘贴即可。 希望有用!

这是您 "IP Whitelist" 的问题。编辑更新一次,应该就可以正常使用了。

我遇到了类似的问题,无法连接到 mongo。显然 mongodb 不喜欢我的包含特殊字符的密码。我尝试进行 URL 编码和所有其他类型的操作,但最终证明为我解决问题的只是将密码更改为不使用特殊字符的密码。我使用了 mongodb 密码生成器,现在一切正常。

显然,正在改变

mongoose.connect(keys.mongoURI);

mongoose.connect(keys.mongoURI, () => { }, { useNewUrlParser: true })
    .catch(err => {
        console.log(err);
    });

对我有用。

检查您当前的 IP 地址是否在 MongoAtlas IP 白名单中。我更新 VPN 后遇到了这个问题。

google => 我的 ip 地址 => 复制

进入 Atlas => 进入“集群”选项卡后,在左侧查看 => 安全 => 网络访问 => 编辑 IP => 粘贴 ip 地址。

重新运行您的服务器,它应该可以正常工作:)

上面的答案是正确的,但我想补充一点:

从安全的角度来看,这并不好;

  1. 我也有类似的问题,我可以通过在 Clusters -> security -> IP Whitelist. 下添加我的 white-listing 我的 IP 地址而不是单击我的 current ip address 来解决它,只需在 google 上搜索我的 ip 并粘贴即可。希望有用!

  2. 我也有类似的问题,我可以通过在 Clusters -> security -> IP Whitelist. 下添加我的 white-listing 我的 IP 地址来解决这个问题 在列表中添加了这个 IP:0.0.0.0/0 它将向所有人开放。

我在连接到 MongoDB Atlas 集群时遇到了这个问题。我不得不两次解决这个问题,因为我在两台不同的计算机(一台 Macbook Pro 和一台 Windows PC)上处理一个项目。

以下是我对解决我的应用程序未连接到集群的问题所想出的所有内容的综合回答。

第一个 确保您的 IP 像上述建议一样列入白名单。最简单的解决方案是 "All IPs" 白名单 0.0.0.0/0

第二个 如果您使用的是 VPN,请检查您的 VPN。我在连接到 VPN 时尝试连接到集群。关闭 VPN 后,我就可以连接了。

第三 确保您的互联网设置不会阻止您连接到集群。我家的 Xfinity wifi 安全设置设置得太高,导致无法连接。我认为路由器不允许连接到端口 27017。测试是否发生此问题的一种方法是将您的计算机连接到 phone 以上网而不是 wifi,然后尝试连接。我能够使用 iPhone 作为互联网热点进行连接。我将路由器重置为出厂设置,解决了这个问题。

我遇到了同样的问题,IP 白名单设置正确!

原因是,MongoDB Enterprise Atlas 需要 SSL 加密层尝试在没有它的情况下进行连接,会产生不合理且不自我解释的错误,例如:

Failed to connect to mongodb-m0-nnxxx.mongodb.net:27017
No chance to Authorize

尝试使用带有 IP 白名单的 mondodb 客户端进行连接,出现如下错误消息:

mongo "mongodb+srv://mongodb-m0-nnxxx.mongodb.net/test" --username admin

DBClientConnection failed to receive message from mongodb-m0-shard-00-00-nnxxx.mongodb.net.:27017 - HostUnreachable: Connection closed by peer
Unable to reach primary for set mongodb-m0-shard-0
Cannot reach any nodes for set mongodb-m0-shard-0. Please check network connectivity and the status of the set. This has happened for 5 checks in a row.

例如使用 Robo 3T 客户端,必须启用复选框“使用 SSL 协议”,并且 **身份验证方法:自签名证书**

测试产生诊断输出:

v Connected to mongodb-m0-nnxxx.mongodb.net:27017 via SSL tunnel
v Authorized on admin database as admin

希望这对某人有所帮助。

我遇到了那个问题,我解决了它。以下是我使用的步骤:

  1. 首先在mongodb中添加新用户(安全>数据库访问>添加新用户>)
  2. 然后将新用户名和密码写入 .env 文件。
  3. 终止服务器并重新运行服务器。

这是对我有用的解决方案。

我在将 MongoDB Compass 连接到 https://cloud.mongodb.com/ 集群时也遇到了类似的问题。

以下步骤解决了这个问题。

  1. 访问 google.com > 输入我的 IP 地址 > 复制您 system/network
  2. 的 Public IP 地址
  3. 转到 https://cloud.mongodb.com/ 群集 > Select 安全 > 网络访问 > 单击 IP whilelist 选项卡 > 添加 IP 地址 > 输入您的 public IP 地址。

不知不觉就连上了vpn。当我稍后尝试连接到数据库时,我无法做到。我又打开了自己的绳索和权限里面的所有权限。然后再用vpm连上就可以连上了

我也遇到过类似的问题。然后改了

mongoose.connect(db, () => { }, { useNewUrlParser: true })
    .catch(err => {console.log(err);});

但产生了错误,

(node:5796) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

然后将代码更改为

mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }, () => { })
        .catch(err => console.log(err));

这对我有用。

如果您已连接到热点并感觉自己已正确完成所有操作,请断开连接并重新连接。尤其是关闭您的互联网连接并重新连接。

  • 我也遇到了同样的错误,我尝试了这个逻辑。
  • 除此之外 mongoDb atlas in netwrok Access , configure all ip address.And 将其设置为 -------------- 0.0.0.0/0

我最终通过简单地将“+srv”添加到连接字符串的开头解决了这个问题,如下所示:

mongoose.connect("mongodb+srv://<username>:<password>@<address>/<database>?retryWrites=true&w=majority", {useNewUrlParser: true});

这很奇怪,因为我发现有几个答案指示我做相反的事情。我想我把我的 mongoose 版本搞混了。

希望这对某人有所帮助。

奇怪但更改集群密码(一个没有特殊符号的密码)有帮助。

我遇到了同样的问题,添加到白名单和其他解决方案都没有帮助。但是在我创建了另一个用户之后。在“Database User Privileges”字段中创建新用户时,我选择了“Atlas admin”而不是默认的“Read and write to any database”。之后,连接成功