webentwicklung-frage-antwort-db.com.de

Es kann keine Verbindung zu MongoDB in Azure hergestellt werden

Ich habe eine MongoDB auf Azure und ich versuche mit dem npm-Modul mongodb eine Verbindung herzustellen

var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:[email protected]:10355/?ssl=true", function (err, db) {
  db.close();
});

Passwort

Mein Passwort hat folgende Eigenschaften:

  • Enthält Buchstaben, Kleinbuchstaben und Großbuchstaben
  • Kein Leerraum
  • Enthält Zahlen
  • Enthält Sonderzeichen wie =, @, $ und so weiter

Error

Bei der Ausführung des obigen Codes bekomme ich Folgendes:

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

Die Dokumentation sagt jedoch nicht viel darüber aus, wie Sie dieses Problem lösen können. Ich denke, es ist ein Codierungsproblem. Wie kann ich das beheben?

9
Andry

Zeichen wie @ sind eingeschränkt, da sie die URL-Struktur durcheinander bringen. Der Grund dafür ist, dass MongoDB es als @ -Trennzeichen interpretiert. An Stelle von:

var mongoClient = require("mongodb").MongoClient;
mongoClient.connect("mongodb://myuser:[email protected]@myhost.documents.Azure.com:10355/?ssl=true", function (err, db) {
  db.close();
});

benutze das

mongoClient.connect("mongodb://myuser:myp%[email protected]:10355/?ssl=true", { 
  uri_decode_auth: true 
}, function (err, db) {
  db.close();
});

Verwenden Sie zum Verschlüsseln des Passworts encodeURIComponent(password).

Sie können diese Syntax auch verwenden.

mongoClient.connect("mongodb://myhost.documents.Azure.com:10355/?ssl=true", 
 {user: 'username', pass: '[email protected]'}, function (err, db) {
  db.close();
});

Verwenden Sie in späteren Versionen

auth: {
       user: 'username',
       password: '[email protected]',
    }

wie nachstehend

mongoClient.connect("mongodb://myhost.documents.Azure.com:10355/?ssl=true", {
  auth: {
   user: 'username',
   password: '[email protected]',
  }}, function (err, db) {
  db.close();
});
16
Solver

Die akzeptierte Antwort funktioniert bei mongodb> 3.0.x nicht

Dieser Code funktioniert für mich:

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

let database = null;


new mongoClient('mongodb://myhost.documents.Azure.com:10355/?ssl=true', {
    auth: {
       user: 'username',
       password: '[email protected]',
    }
}).connect(
    (err, db) => {
      if (err) return console.error(err);
      console.log('Database connected');
      database = db.db('foo'); 
});
2

Eigentlich gibt es einen separaten Benutzernamen für mongoDB und für eine Datenbank. Sie haben andere Kennwörter als..So, stellen Sie sicher, dass Sie haben 

0
Mano Sriram

MongoDB kann jetzt ein Passwort mit Sonderzeichen verwenden. Fügen Sie dazu eine Option zur Verbindung hinzu { useNewUrlParser: true }:

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

const uri = 'mongodb://mydbname:pa$s;[email protected]@mongodb0.example.com:27017/admin';

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