无法使用 mongoose 连接到 Mongodb Atlas

Posted

技术标签:

【中文标题】无法使用 mongoose 连接到 Mongodb Atlas【英文标题】:Unable to connect to Mongodb Atlas using mongoose 【发布时间】:2020-07-25 01:13:13 【问题描述】:

我正在尝试使用节点 js 中的 mongoose 连接到在 Mongodb Atlas 中创建的集群,这样做时我遇到了以下问题。

    当我使用 Mongo db atlasmongodb+srv://lm_dev_app:<password>@lmdev-q5biw.mongodb.net/test?retryWrites=true&w=majority中给出的连接字符串时,出现以下错误

    错误:queryTxt EBADNAME lmdev-q5biw.mongodb.net 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19) 错误号:'EBADNAME', 代码:'EBADNAME', 系统调用:'queryTxt', 主机名:'lmdev-q5biw.mongodb.net'

我无法在 Mongodb Compass 中使用此连接字符串,并且在那里遇到同样的错误。

    如果我尝试使用mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net/test 进行连接,则会出现以下错误

    MongooseServerSelectionError:与 54.66.221.230:27017 的连接已关闭

但是我可以使用 Mongodb Compass 连接到每个节点,这消除了我的 ipaddress 未被列入白名单的可能性。

这是我正在使用的示例代码

const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net/test", 
    useNewUrlParser: true,
    useUnifiedTopology: true,
    replicaSet: "LMDEV"
, (err) => 
    if (err) 
        console.log(err);
     else 
        console.log("Successful");
    
);

关于这里发生的事情的任何想法。

【问题讨论】:

***.com/questions/60563988/… 看看这个 @kedarsedai 我已经做到了。但是我可以在同一台机器上使用 Mongodb Compass 进行连接,这表明 IP 地址没有问题。 您正在尝试将MongoDB Atlas 连接到您的`Node` 应用程序? 您是否删除了&lt;&gt; angle brackets 并将您的密码放在那里? @kedarsedai 是的,我做到了。我正在尝试从我的 Node 应用程序连接到我在 Mongodb Atlas 上创建的集群。 【参考方案1】:

我需要在这里强调几件事。

    Mongodb Atlas 中显示的默认连接字符串似乎是错误的。它向您显示mongodb+srv://&lt;username&gt;:&lt;password&gt;@&lt;cluster_url&gt;/test?retryWrites=true&amp;w=majority。但我使用mongodb://&lt;username&gt;:&lt;password&gt;@&lt;node_url&gt;:27017/ 使其工作。您也可以使用mongodb://&lt;username&gt;:&lt;password&gt;@&lt;node_url&gt;:27017/admin

    在我们传递的选项中传递ssl:true

    最后可以使用 3 个选项之一连接到数据库。

    一个。 const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/", useNewUrlParser: true, useUnifiedTopology: true, authSource:"admin", ssl: true, , (err) => if (err) console.log(err); else console.log("Successful"); );

    b. const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/", useNewUrlParser: true, useUnifiedTopology: true, authSource:"admin", ssl: true, , (err) => if (err) console.log(err); else console.log("Successful"); );

    c。 const mongoosePromise = mongoose.connect("mongodb://lm_dev_app:<password>@lmdev-shard-00-01-q5biw.mongodb.net:27017/admin", useNewUrlParser: true, useUnifiedTopology: true, ssl: true, , (err) => if (err) console.log(err); else console.log("Successful"); );

编辑 1: 在与 Atlas 支持团队交谈后,我被告知第 1 点的问题是由于我的服务提供商的 DNS 解析问题。所以我更改了我的 DNS 设置以指向公共 DNS 服务器。

【讨论】:

天哪!你怎么能让你的连接字符串出错? @kedarsedai 我假设这是错误的,因为与 Mongodb Atlas 上提供的连接字符串相比,Mongodb Compass 构造了不同的连接字符串。 好吧,好好研究。 感谢@SachinKumar 在浪费了 12 小时后找到了您的答案。 cluster_url和node_url有什么区别?

以上是关于无法使用 mongoose 连接到 Mongodb Atlas的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Mongoose 连接到 MongoDB Atlas

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

无法将 Mongoose 连接到 Atlas

无法使用带有 X509 用户的 mongoose 连接到 Mongo DB

Mongoose 无法连接到 mLab 环境

Mongoose 无法连接到 mLab 环境