mongoose.connect(...)中的连接字符串中的azure cosmodb'='失败

时间:2019-01-16 05:30:29

标签: mongoose azure-cosmosdb

MongoError: database name must be a string

Nodejs脚本:

// Azure tells me to use mongodb://mydb:LONG-STRING-ENDING-WITH==@mydb.documents.azure.com:10255/?ssl=true
// I change the = to %3D - I've confirmed this is the correct escaping
readonly serverConnection = 'mongodb://mydb:LONG-STRING-ENDING-WITH%3D%3D@mydb.documents.azure.com:10255/?ssl=true');

...
const mongoDB = await mongoose.connect(
    this.serverConnection,
    {
      useNewUrlParser: true,
      reconnectTries: Number.MAX_VALUE,
      reconnectInterval: 1000
    }
  );

如果我删除了==%3D%3D,或更改为其他名称(例如XX),则可能是该错误:

{ MongoError: Authentication Failed

所以它不是字符串的长度,必须为==。

为什么会这样?一个人可以做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

我找到了一个很好的答案,您不必放弃新的URL解析器。您必须像这样在连接字符串的末尾添加数据库名称:

mongodb://<connectionstring/url>:port/<DATABASENAME>?ssl=True

在我看来,这是一个干净的解决方案。希望我能帮忙

答案 1 :(得分:0)

我找到了答案的一部分。删除:

useNewUrlParser: true

并忽略警告。目前。它告诉您该解决方案将来将无法使用。

DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

如果有人可以扩展有关如何在连接字符串中使用新解析器和==的详细信息,我将不胜感激。而且也很高兴知道为什么==或转义版本会成为问题。