azure cosmodb '=' в строке подключения завершается ошибкой в ​​mongoose.connect (...) - PullRequest
0 голосов
/ 16 января 2019
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

Так что это не длина строки и должна быть ==.

Почему это происходит? Что можно сделать, чтобы обойти это?

1 Ответ

0 голосов
/ 16 января 2019

Я нашел часть ответа. Удалить:

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.

Буду признателен, если кто-нибудь сможет расширить этот ответ подробностями о том, как использовать новый синтаксический анализатор и == в строках соединения. А также было бы неплохо узнать, почему == или экранированная версия является проблемой.

...