连接MongoDb Atlas Server时遇到错误

时间:2018-04-18 08:34:50

标签: node.js mongodb mongoose mongodb-atlas

所以我目前正在创建一个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:未处理的承诺拒绝(拒绝ID:1):MongoNetworkError:首次连接时无法连接到服务器[insight-shard-00-02-quhku.mongodb.net:27017] [MongoNetworkError:connect ECONNREFUSED 18.194 .163.64:27017] (节点:4920)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

19 个答案:

答案 0 :(得分:6)

我也遇到了类似的问题,我可以通过在群集->安全-> IP白名单下添加我的IP地址白名单来解决此问题。无需点击my current ip address,只需在Google上搜索我的IP地址并将其粘贴即可。 我希望它能起作用!

答案 1 :(得分:3)

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

这是我为解决我的应用程序未连接到群集的问题而想出的一切的全面答案。

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

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

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

答案 2 :(得分:2)

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

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

只是删除+ srv也不会工作,因为uri需要包含副本主机和replicaSet / authSource参数。

你可以

<强> 1。升级到mongoose 5.0.15并使用较短的+ srv格式

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

从群集仪表板

,按连接按钮,然后(假设您已将节点服务器的IP列入白名单)选择&#34;连接您的应用程序&#34;,然后按&#34; I我使用的是3.4或更老的驱动程序&#34;。使用生成的uri字符串替换您的密码。

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

答案 3 :(得分:2)

我最终通过简单地在连接字符串的开头包括“ + srv”来解决了这个问题,

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

这很奇怪,因为我找到了几个答案,指示我做相反的事情。我想我的猫鼬版本混在一起了。

希望这对某人有帮助。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

  • 我也遇到了同样的错误,我尝试了这种逻辑。
  • 此外,netwrok Access中的mongoDb地图集中的所有内容均已确认 ip地址并将其设置为---------------- 0.0.0.0/0

答案 6 :(得分:1)

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

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

但产生了错误

(节点:5796)DeprecationWarning:当前URL字符串解析器为 已过时,将在以后的版本中删除。使用新的 解析器,将选项{useNewUrlParser:true}传递给MongoClient.connect。

然后将代码更改为

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

这对我有用。

答案 7 :(得分:1)

显然,正在改变

mongoose.connect(keys.mongoURI);

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

为我工作。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

这是您的“ IP白名单”问题。对其进行一次编辑和更新,然后即可正常运行。

答案 10 :(得分:0)

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

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

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

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

答案 11 :(得分: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

希望这对某人有帮助。

答案 12 :(得分:0)

我遇到了问题,并已解决。以下是我使用的步骤:

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

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

答案 13 :(得分:0)

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

以下步骤解决了该问题。

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

答案 14 :(得分:0)

我在意识到之前就与vpn建立了联系。当我稍后尝试连接到数据库时,我做不到。我打开了自己的绳索,并再次打开了权限中的所有权限。然后,当我再次与vpm连接时,便可以连接。

答案 15 :(得分:0)

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

答案 16 :(得分:0)

如果您已连接到热点,并且感觉已正确完成所有操作,请断开连接并重新连接。最特别的是,关闭您的Internet连接并重新连接。

答案 17 :(得分:0)

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

答案 18 :(得分:-1)

google =>我的IP地址=> copyit

进入Atlas =>重新进入“ Clusters”选项卡后,检查左侧=> 安全=> NetWork访问=>编辑IP =>粘贴IP地址。

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