簡體   English   中英

無法連接到Azure中的MongoDB

[英]Cannot connect to MongoDB in Azure

我在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();
});

密碼

我的密碼具有以下特征:

  • 包含字母,小寫,大寫
  • 沒有空格
  • 包含數字
  • 包含特殊字符,例如=@$

錯誤

執行上面的代碼時,我得到以下信息:

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

但是,文檔並未說明如何解決此問題。 我猜這是一個編碼問題。 如何解決這個問題?

諸如@之類的字符受限制,因為它們會弄亂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();
});

用這個

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

要對密碼進行編碼,請使用encodeURIComponent(password)

您也可以使用此語法。

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

在更高版本上,請使用

auth: {
       user: 'username',
       password: 'p@ssword',
    }

如下

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

接受的答案在mongodb> 3.0.x上對我不起作用

此代碼對我有用:

const mongoClient = require("mongodb").MongoClient;

let database = null;


new mongoClient('mongodb://myhost.documents.azure.com:10355/?ssl=true', {
    auth: {
       user: 'username',
       password: 'p@ssword',
    }
}).connect(
    (err, db) => {
      if (err) return console.error(err);
      console.log('Database connected');
      database = db.db('foo'); 
});

MongoDB現在可以使用帶有特殊字符的密碼。 為此,向連接{ useNewUrlParser: true }添加一個選項:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

const uri = 'mongodb://mydbname:pa$s;w@rd@mongodb0.example.com:27017/admin';

MongoClient.connect(uri, { useNewUrlParser: true }, (err, db) => {
    assert.strictEqual(null, err);
    // ...
    db.close();
});

實際上,mongoDB和數據庫都有單獨的用戶名。它們也有不同的密碼。因此,請確保您擁有

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM