无法连接到Azure中的MongoDB

And*_*dry 11 javascript azure mongodb node.js

我在Azure上有一个MongoDB,我正在尝试使用npm模块mongodb连接到它:

var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:mypassword@myhost.documents.azure.com:10355/?ssl=true", function (err, db) {
  db.close();
});
Run Code Online (Sandbox Code Playgroud)

密码

我的密码具有以下特征:

  • 包含字母,小写,大写
  • 没有空白区域
  • 包含数字
  • 包含特殊字符,如=,@,$

错误

执行上面的代码时,我得到以下内容:

Error: Password contains an illegal unescaped character
    at parseConnectionString (C:\Users\myuser\Documents\myproj\node_modules\mongodb\lib\url_parser.js:280:13)
Run Code Online (Sandbox Code Playgroud)

但是,文档并未详细说明如何解决此问题.我想这是一个编码问题.如何解决这个问题?

Sol*_*ver 17

像@这样的字符会受到限制,因为它们会破坏URL的结构.这是因为MongoDB将其解释为@分隔符.而不是这个:

var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:myp@ssword@myhost.documents.azure.com:10355/?ssl=true", function (err, db) {
  db.close();
});
Run Code Online (Sandbox Code Playgroud)

用这个

mongoClient.connect("mongodb://myuser:myp%40ssword@myhost.documents.azure.com:10355/?ssl=true", { 
  uri_decode_auth: true 
}, function (err, db) {
  db.close();
});
Run Code Online (Sandbox Code Playgroud)

要编码密码,请使用 encodeURIComponent(password)

您也可以使用此语法.

mongoClient.connect("mongodb://myhost.documents.azure.com:10355/?ssl=true", 
 {user: 'username', pass: 'p@ssword'}, function (err, db) {
  db.close();
});
Run Code Online (Sandbox Code Playgroud)

在以后的版本中,使用

auth: {
       user: 'username',
       password: 'p@ssword',
    }
Run Code Online (Sandbox Code Playgroud)

如下

mongoClient.connect("mongodb://myhost.documents.azure.com:10355/?ssl=true", {
  auth: {
   user: 'username',
   password: 'p@ssword',
  }}, function (err, db) {
  db.close();
});
Run Code Online (Sandbox Code Playgroud)

  • 不使用包mongodb版本> 3.0.0看到我的答案 (2认同)