无法使用 mongoose 连接到 Mongodb Atlas
Unable to connect to Mongodb Atlas using mongoose
我正在尝试使用 node js 中的 mongoose 连接到在 Mongodb Atlas 中创建的集群,这样做时我遇到了以下问题。
当我使用 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 中使用此连接字符串,而且我在那里遇到了同样的错误。
如果我尝试使用 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");
}
});
对这里发生的事情的任何想法。
我需要在这里强调几件事。
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
.
在我们传递的选项中传递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 设置以指向 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
我正在尝试使用 node js 中的 mongoose 连接到在 Mongodb Atlas 中创建的集群,这样做时我遇到了以下问题。
当我使用 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 中使用此连接字符串,而且我在那里遇到了同样的错误。
如果我尝试使用
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");
}
});
对这里发生的事情的任何想法。
我需要在这里强调几件事。
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
.在我们传递的选项中传递
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 设置以指向 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