34

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

现在我想通过 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',

消息:'第一次连接时无法连接到服务器 [insight-shard-00-02-quhku.mongodb.net:27017] [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]'} (node:4920) UnhandledPromiseRejectionWarning: Unhandled promise拒绝(拒绝 id:1):MongoNetworkError:第一次连接时无法连接到服务器 [insight-shard-00-02-quhku.mongodb.net:27017] [MongoNetworkError:连接 ECONNREFUSED 18.194.163.64:27017](节点:4920 ) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

4

19 回答 19

77

我也遇到了类似的问题,我可以通过在 Clusters -> security -> IP Whitelist 下添加我的 IP 地址白名单来解决它。无需单击my current ip address,只需在 Google 上搜索我的 ip 并粘贴即可。我希望它有效!

于 2019-02-11T12:46:58.177 回答
24

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

这是我为解决我的应用程序未连接到集群的问题而想出的所有内容的综合答案。

首先 确保您的 IP 像上述建议一样被列入白名单。最简单的解决方案是 0.0.0.0/0 的“所有 IP”白名单

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

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

于 2019-08-02T21:07:15.497 回答
5

如果您使用的是 5.0.15 之前的 mongoose:

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

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

你可以

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

或者

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

在集群仪表板中,按连接按钮,然后(假设您已将节点服务器的 IP 列入白名单)选择“连接您的应用程序”,然后按“我正在使用 3.4 驱动程序或更早版本”。使用生成的 uri 字符串替换您的密码。

注意:在 Atlas 集群仪表板上的连接帮助程序中选择 URI 字符串的对话框中,它显示“我正在使用驱动程序 3.* 或(较新|较旧)”。这是一个糟糕的词选择,因为 3.6 和 3.4 不是指驱动程序版本,而是服务器版本。此外,使用服务器的一个版本或另一个版本与用于连接的驱动程序无关,这是决定使用哪个版本的 URI 的实际依赖关系所在。

于 2018-04-18T08:58:00.883 回答
4

这是您的“IP 白名单”的问题。编辑和更新一次,它应该可以正常工作。

于 2019-04-13T12:30:59.520 回答
4

上面的答案是对的,但我只想补充一点:

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

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

  2. Clusters -> security -> IP Whitelist. 我也遇到了类似的问题,我可以通过在列表中添加此 IP下添加我的 IP 地址白名单来解决它:0.0.0.0/0它将对所有人开放。

于 2019-07-16T06:06:29.793 回答
3

我最终通过简单地在连接字符串的开头包含“+srv”来解决这个问题,如下所示:

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

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

希望这可以帮助某人。

于 2020-06-15T16:51:52.287 回答
2

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

以下步骤可解决该问题。

  1. 访问 google.com > 输入我的 IP 地址 > 复制您的系统/网络的公共 IP 地址
  2. 转到https://cloud.mongodb.com/ 集群 > 选择安全 > 网络访问 > 单击 IP whilelist 选项卡 > 添加 IP 地址 > 输入您的公共 IP 地址。
于 2019-12-06T08:56:44.677 回答
2

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

于 2020-05-11T08:46:11.007 回答
1

显然,改变

mongoose.connect(keys.mongoURI);

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

为我工作。

于 2019-06-11T18:29:36.447 回答
1

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

于 2019-06-12T02:27:14.587 回答
1

我遇到了这个问题,我修复了它。以下是我使用的步骤:

  1. 首先在 mongodb 中添加新用户(Security > Database Access > ADD NEW USER > )
  2. 然后写入 .env 文件新的用户名和密码。
  3. 杀死服务器并重新运行服务器。

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

于 2019-09-04T10:45:01.823 回答
1
  • 我也遇到了同样的错误,我尝试了这个逻辑。
  • 除此之外,在netwrok Access的mongoDb atlas中,配置所有ip地址。并将其设置为---------------- 0.0.0.0/0
于 2020-05-28T06:35:30.380 回答
1

我也有这个类似的问题。然后改变了

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

但产生了错误,

(node:5796) DeprecationWarning:当前的 URL 字符串解析器已被弃用,并将在未来的版本中删除。要使用新的解析器,请将选项 { useNewUrlParser: true } 传递给 MongoClient.connect。

然后将代码更改为

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

这对我有用。

于 2020-05-09T19:51:30.490 回答
1

我有同样的问题,添加到白名单和其他解决方案没有帮助。但是在我创建了另一个用户之后。在“数据库用户权限”字段中创建新用户时,我选择了“Atlas admin”而不是默认的“读取和写入任何数据库”。之后,连接工作

于 2021-04-01T07:07:28.530 回答
0

在我意识到之前,我连接了 vpn。当我稍后尝试连接到 db 时,我无法做到。我再次打开了自己的绳索和权限中的所有权限。然后当我再次连接 vpm 时,我能够连接。

于 2020-04-11T17:34:58.207 回答
0

我有同样的问题,而 IP 白名单设置正确!

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

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

尝试使用 mondodb 客户端连接 IP 白名单是问题,出现如下错误消息:

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

希望这可以帮助某人。

于 2019-08-14T13:18:59.640 回答
0

谷歌 => 我的 IP 地址 => 复制

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

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

于 2019-06-25T12:17:09.547 回答
0

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

于 2020-09-11T12:39:05.570 回答
-1

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

于 2019-04-24T12:23:41.780 回答