无法使用 mongoose 连接到 Mongodb Atlas

Unable to connect to Mongodb Atlas using mongoose

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

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

    { 错误:queryTxt EBADNAME lmdev-q5biw.mongodb.net 在 QueryReqWrap.onresolve [完成时] (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 连接到每个节点,这消除了我的 IP 地址未被列入白名单的可能性。

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

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");
    }
});

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

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

  1. Mongodb Atlas 中显示的默认连接字符串似乎有误。它显示你 mongodb+srv://<username>:<password>@<cluster_url>/test?retryWrites=true&w=majority。但是我用 mongodb://<username>:<password>@<node_url>:27017/ 来让它工作。您也可以使用 mongodb://<username>:<password>@<node_url>: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 设置以指向 public DNS 服务器。

在尝试了几个小时不同的连接字符串之后,我终于 copy/pasted 来自 MongoDB Compass 的连接字符串并且它起作用了! (首先连接,然后编辑连接字符串,因为它会改变)

看起来像这样:

mongodb+srv://username:password@fra-atlas-shard.abcde.mongodb.net/test?authSource=admin&replicaSet=atlas-abcde-shard-0&readPreference=primary&appname=MongoDB%20Compass&ssl=true