如何使用mongoose连接mongoDB Atlas

30

我正在尝试通过Mongoose.connect()连接MongoDB Atlas上的集群,但每次尝试连接时都会出现异常"MongoError:authentication fail"。我知道MongoDB Atlas是新的作为服务提供的Mongo数据库,难道它还不被Mongoose支持吗?


1
“<hcluster0>” 是你的数据库的实际名称吗?此外,如果“password”包含在URI中具有特殊含义的字符(如“@”、“+”、“%”、“/”),则需要对其进行编码。 - robertklep
你是否将你的公共IP地址添加到白名单中了? - helmy
是的,这是实际名称(但这并不重要,我只是用它进行测试,不用担心)。但是我之前使用的是mLab,我不需要编码任何东西。是的,我已将公共IP地址添加到白名单中。 - M Hilal
使用 directConnection: true,在连接选项中。 - Sibelius Seraphini
显示剩余3条评论
5个回答

21

这篇相关帖子的回答是正确的。您应该:

  • 不要将选项与连接字符串混合(如果已这样做)
  • 确保您正在运行的 IP 地址已列入白名单,并且您的网络允许连接到 Atlas
  • 确保用户具有足够的权限
  • 使用 Atlas 提供的连接字符串原样,并将其提供给

    mongoose.connect(uri);
    

1
请确保您正在使用最新的mongoose版本。 - Thomas Gotwig
1
这个可以工作,但是特殊字符需要被输入为字面量,参考。我已经发现了我的密码存在这个问题。 - user7075574

19

MongoError: 认证失败 - 这意味着您的用户名、密码或数据库名称不正确 -

URI 示例 -

const uri =
    "mongodb+srv://<username>:<password>@firstcluster.4rc4s.mongodb.net/<dbname>?retryWrites=true&w=majority";

假设用户名是 - najim,密码是1234,dbname是pets(注意 - 默认的dbname是test,但您可以写任何想要的名称),那么我的URI将使用上述凭据为:

const  mongoAtlasUri =
        "mongodb+srv://najim:1234@firstcluster.4rc4s.mongodb.net/pets?retryWrites=true&w=majority";

连接 moongoose

try {
    // Connect to the MongoDB cluster
     mongoose.connect(
      mongoAtlasUri,
      { useNewUrlParser: true, useUnifiedTopology: true },
      () => console.log(" Mongoose is connected")
    );

  } catch (e) {
    console.log("could not connect");
  }

7
const mongoAtlasUri =
  "mongodb+srv://<username>:<password>@firstcluster.4rc4s.mongodb.net/<dbname>?retryWrites=true&w=majority";

try {
  // Connect to the MongoDB cluster
  mongoose.connect(
    mongoAtlasUri,
    { useNewUrlParser: true, useUnifiedTopology: true },
    () => console.log(" Mongoose is connected"),
  );
} catch (e) {
  console.log("could not connect");
}

const dbConnection = mongoose.connection;
dbConnection.on("error", (err) => console.log(`Connection error ${err}`));
dbConnection.once("open", () => console.log("Connected to DB!"));

2
请考虑在您的代码中添加一条注释/提示。 - Farrukh Normuradov

5
try {
mongoose.connect( uri, {useNewUrlParser: true, useUnifiedTopology: true}, () =>
console.log("connected"));    
}catch (error) { 
console.log("could not connect");    
}

这个很好用,试试看吧。


-2

"mongodb+srv://:@cluster0.vvkuk.mongodb.net/" 在Atlas中,进入安全性,找到网络访问,会有编辑和删除的小按钮,点击编辑,在编辑中,会有两个选项,第一个选项是添加当前IP地址,第二个选项是允许从任何地方访问。 选择第一个选项,然后点击确认。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接