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

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

  1. 当我使用 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 中使用此连接字符串,并且在那里遇到同样的错误。

  1. 如果我尝试使用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");
    }
});

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

【问题讨论】:

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

标签: mongodb mongoose mongodb-atlas


【解决方案1】:

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

  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

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

  3. 最后可以使用 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有什么区别?
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 2019-12-30
  • 2017-09-09
  • 2019-09-04
  • 2018-08-01
  • 2020-05-12
  • 2019-03-14
  • 2019-10-23
相关资源
最近更新 更多