连接Mongoose到MongoDB Atlas和Node.js

3
这是我的mongoose连接代码:
mongoose.connect("mongodb+srv://Sarthak:*******:Wb@cluster0-jli2a.mongodb.net/test?retryWrites=true",{ useNewUrlParser: true })
    .then(()=>{
        console.log("Connected to mongo database");
    })
    .catch((err)=>{
        console.log("Error connecting mongo database",err);
    });

我遇到了下面的错误,有什么方法可以解决吗?

连接Mongo数据库出错 { MongoParseError: 在授权部分中未转义冒号 at parseConnectionString (/home/sarthak/Projects/thePracticalGuide/node_modules/mongodb-core/lib/uri_parser.js:250:23) at QueryReqWrap.dns.resolveTxt [as callback] (/home/sarthak/Projects/thePracticalGuide/node_modules/mongodb-core/lib/uri_parser.js:126:7) at QueryReqWrap.onresolve [as oncomplete] (dns.js:240:10) name: 'MongoParseError', [Symbol(mongoErrorContextSymbol)]: {} }

这是我连接时遇到的错误


请将命令/日志作为文本插入,而不是作为图像。有无数个原因为什么要这样做(https://meta.stackoverflow.com/q/285551/3995261)。 - YakovL
有没有任何解决方案有效? - amitava mozumder
1
没有 @amitavamozumder ,我改用了 mlab,到目前为止已经开发了大约4-5个个人项目。它非常出色。 - Sarthak Srivastav
6个回答

3

只需进入Atlas网站的安全选项卡,编辑用户密码,并确保不使用“@”或“:”字符。就这样。


考虑为您提供的信息添加来源,并解释为什么它与问题所提供的相关。 - Ícaro

2
你需要在连接字符串中编码密码:

你需要在连接字符串中对密码进行编码:

const connectionString = `mongodb://yourUsername:${encodeURIComponent('yourPassword')}@127.0.0.1:27017/mydb`;

1
由于我在JS中使用密码并在Go中生成它,因此我使用https://pkg.go.dev/net/url#QueryEscape。 - Denis Trofimov

1
错误描述很清楚——你的密码中有冒号吗?典型的连接字符串格式为“mongodb+srv:[username:password@]host1...”,因此未转义的冒号会引发解析错误。

不,我的密码只有一个下划线。 - Sarthak Srivastav
两个建议: 1)任何'@'符号前的内容都是你的密码 - 删除':Wb'。 2)在选项中指定数据库名称。例如:mongoose.connect('"mongodb+srv://Sarthak:*******@cluster0-jli2a.mongodb.net/',{dbName: 'test'})。 - chuck_sum

1
尝试也使用这种连接方式。
 /* I've removed the ":Wb" between your password and @clus... As mongoDB atlas website didn't use that in my generated connection string */
  mongoose.connect("mongodb+srv://Sarthak:*******@cluster0-jli2a.mongodb.net/test?retryWrites=true",{ useNewUrlParser: true });    

  mongoose.connection.on('error', (err) => {
    console.error(`Mongoose connection error: ${err}`);
    process.exit(1);
  });

否则需要考虑的事情:

  • 确保您已将连接设备的IP地址添加到mongoDB atlas网站中集群安全选项卡中的IP白名单中(如果您已经这样做了,可以尝试通过添加0.0.0.0/0来授予所有IP权限以检查是否存在问题)
  • 关于密码,您可能会与mongoDB atlas登录密码混淆,而不是为集群创建的用户(这是mongoDB atlas新手常犯的错误)。
  • 如果没有,并且您正在使用正确的密码,则可以尝试在安全选项卡中删除用户并重新创建它(在mongoDB atlas网站的集群视图中)。首先考虑给用户一个非常基本的密码,没有任何特殊字符,然后再尝试连接以确保它不是编码问题。
  • 最后,如果以上都无法解决问题,请尝试通过shell进行连接。(您可以在mongoDB atlas网站上的集群连接部分中查看连接字符串。在那里,您可以获取有关问题原因的更好日志记录。)

1

我曾经遇到过同样的问题,也是关于"未转义的冒号",尽管它们已经非常明确地被转义了。请尝试以下方法:

var uri = encodeURI('mongodb+srv://Sarthak:*******:Wb@cluster0-jli2a.mongodb.net/test?retryWrites=true');

0

在使用MongoDB Compass输入连接字符串时,我遇到了"未转义的冒号在权限部分"的问题。

为此 -

我进入了"创建免费集群"按钮并创建了一个集群。

然后我得到了连接字符串。但是,在输入可用的连接字符串时,我遇到了错误。

我只需登录mongodb atlas更改密码即可。

以下是我使用的步骤 -->

 [1]  To change the password - click on encode URI

enter image description here

 [2]   It will take you here -->

enter image description here

  [3]   Click on the edit button from the screen above and change your password.

enter image description here

我按照上述步骤成功登录了。


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