无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群
Posted
技术标签:
【中文标题】无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群【英文标题】:Unable to connect to Mongodb.atlas cluster using MEAN stack 【发布时间】:2019-02-26 01:57:20 【问题描述】:使用 MEAN 堆栈连接到我的服务器时遇到问题。 直到今天我连接都没有问题,并且从那以后没有更改代码,所以我很困惑为什么突然无法连接。
连接:
mongoose.connect("mongodb+srv://theller5567:" + process.env.MONGO_ATLAS_PW + "@cluster0-efzkv.mongodb.net/node-angular", useNewUrlParser: true )
.then(() =>
console.log("Connected to database!");
)
.catch((error) =>
console.log("Connection failed!", error);
);
回复:
[nodemon] starting `node server.js`
Connection failed! MongoNetworkError: failed to connect to server
[cluster0-shard-00-01-efzkv.mongodb.net:27017] on first connect
[MongoNetworkError: getaddrinfo ENOTFOUND cluster0-shard-00-01-
efzkv.mongodb.net cluster0-shard-00-01-efzkv.mongodb.net:27017]
at Pool.<anonymous> (/Users/Travis/Desktop/Github_Repos/OMNI-INC/Omni-
pl/node_modules/mongodb-core/lib/topologies/server.js:564:11)
at Pool.emit (events.js:182:13)
at Connection.<anonymous> (/Users/Travis/Desktop/Github_Repos/OMNI-INC/Omni-
pl/node_modules/mongodb-core/lib/connection/pool.js:317:12)
at Object.onceWrapper (events.js:273:13)
at Connection.emit (events.js:182:13)
at TLSSocket.<anonymous> (/Users/Travis/Desktop/Github_Repos/OMNI-INC/Omni-
pl/node_modules/mongodb-core/lib/connection/connection.js:246:50)
at Object.onceWrapper (events.js:273:13)
at TLSSocket.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]:
在终端中使用 MongoShell 连接的响应:
connecting to: mongodb+srv://cluster0-efzkv.mongodb.net/test
2018-09-21T13:22:28.817-0400 I NETWORK [js] Starting new replica set monitor
for Cluster0-shard-0/cluster0-shard-00-02-efzkv.mongodb.net.:27017,cluster0-
shard-00-00-efzkv.mongodb.net.:27017,cluster0-shard-00-01-
efzkv.mongodb.net.:27017
2018-09-21T13:23:22.276-0400 W NETWORK [js] Unable to reach primary for set
Cluster0-shard-0
2018-09-21T13:23:22.276-0400 I NETWORK [js] Cannot reach any nodes for set
Cluster0-shard-0. Please check network connectivity and the status of the
set. This has happened for 1 checks in a row.
2018-09-21T13:23:22.280-0400 E QUERY [js] Error: connect failed to replica
set Cluster0-shard-0/cluster0-shard-00-02-efzkv.mongodb.net.:27017,cluster0-
shard-00-00-efzkv.mongodb.net.:27017,cluster0-shard-00-01-
efzkv.mongodb.net.:27017 :
connect@src/mongo/shell/mongo.js:257:13
@(connect):1:6
exception: connect failed
我让 mongod 像往常一样在单独的终端中运行。 有没有人对可能是什么问题以及如何根据错误响应进行修复有任何想法?
任何帮助都会很棒,谢谢!
【问题讨论】:
【参考方案1】:您遇到此错误的原因可能有三个。
-
检查您的用户密码。
检查你的IP地址,使用你当前的IP地址network access -> actions -> edit -> add current IP address
-
最后检查代码中 mongoClient.connect 中的数据库名称。您在本地存储中的数据库名称可能与云存储中的不同。
【讨论】:
【参考方案2】:在同样的情况下,您可以尝试一些可以帮助我解决问题的方法。
-
登录 mongoDB Atlas 并检查 Atlas 是否正常工作。如果它正在工作,请转到安全> IP-白名单并删除您当前的 IP,然后使用您当前的 IP 添加一个新 IP。也许您的 IP 因您的提供商而改变。还要检查您的 mongoDB 用户是否仍然有效,您可以在 IP 白名单选项卡旁边进行检查。
尝试卸载并重新安装您的 mongoose 软件包。在重新安装之前清理你的 npm 缓存。
更改您的 URI-String 类型以连接您的应用程序。将其从“SRV 连接字符串”更改为“标准连接字符串”。在集群内的仪表板中,单击 CONNECT > Connect your application > Standard connection string。复制字符串并替换应用程序中的 SRV-String。当我在连接 Atlas 时遇到问题时,这大部分时间都帮了我。
检查您使用的互联网连接是否没有阻止流量/访问 mongoDB atlas。
【讨论】:
以上是关于无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群的主要内容,如果未能解决你的问题,请参考以下文章
Heroku + MEAN 堆栈错误:参数“url”必须是字符串,而不是未定义
在 MEAN 堆栈中,如何进行一次性 MongoDB 索引?