【发布时间】:2020-05-12 03:10:32
【问题描述】:
虽然我不是 Stackoverflow 上第一个无法使用 mongoose 连接到 mongoDB atlas 的人,但似乎没有人遇到我的具体错误:
{ MongoNetworkError: 连接服务器失败 [cluster0-shard-00-00-shqnc.mongodb.net:27017] 首次连接 [MongoNetworkError:连接 5 到 cluster0-shard-00-00-shqnc.mongodb.net:27017 关闭]
这是我的服务器的设置方式:
Keys.js
module.exports = {
mongoURI:
"mongodb+srv://Ahmed:<MyMongoDBAtlasPWD>@cluster0-shqnc.mongodb.net/test?retryWrites=true&w=majority"
};
Server.js
const express = require("express");
const mongoose = require("mongoose");
const app = express();
// DB Config
const db = require("./config/keys").mongoURI;
// Connect to MongoDB
mongoose
.connect(db, {
useNewUrlParser: true
})
.then(() => {
console.log("MongoDB connected!");
})
.catch(err => {
console.log(err);
});
app.get("/", (req, res) => {
res.send("Hello");
});
//process.env.Port is for Heroku
const port = process.env.Port || 5000;
// `` ES6 Template literal is used so that we can put a variable inside the String
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
这是MongoDB atlas网站建议使用的代码:
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://Ahmed:<password>@cluster0-shqnc.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
const collection = client.db("test").collection("devices");
// perform actions on the collection object
client.close();
});
但是,由于我不想使用 mongoClient 而是使用 mongoose,所以我遇到了一些麻烦,我看不出为什么代码不起作用;
编辑 1: 我已设法使用 Shell 命令进行连接(查看我的答案)。但是,通过应用程序连接不起作用并给出不同的错误:
{ MongoNetworkError: 连接服务器失败 [cluster0-shard-00-01-shqnc.mongodb.net:27017] 首次连接 [MongoError: bad auth Authentication failed.]
编辑 2: 我犯了一个愚蠢的错误。我忘记从 .现在一切都很好。
【问题讨论】:
-
您是否确保您尝试连接的 IP 地址已在 atlas 中列入白名单?
-
@AshishModi 是的,它完成了
-
尝试从你的 mongo shell 连接它——比如
mongo yourconnectionstringhere看看你会得到什么 -
@AshishModi 它给出了同样的错误
-
@AshishModi 我已经解决了。看看我的回答。
标签: node.js mongodb express mongoose