我正在尝试使用node js中的猫鼬连接到在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) errno:“ EBADNAME”, 代码:“ EBADNAME”, syscall:“ 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");
}
});
对这里发生的事情有任何想法。
答案 0 :(得分: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
。
传递ssl:true
。
最后,可以使用3个选项之一连接到数据库。
a。 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服务器。