2012-12-26 7 views
10

Die MongoClient Dokumentation zeigt, wie eine Server-Instanz verwenden, um eine Verbindung zu erstellen:Wie können Sie den mongodb-Benutzernamen und das Passwort mithilfe einer Server-Instanz angeben?

var Db = require('mongodb').Db, 
    MongoClient = require('mongodb').MongoClient, 
    Server = require('mongodb').Server; 

// Set up the connection to the local db 
var mongoclient = new MongoClient(new Server("localhost", 27017)); 

Wie würden Sie einen Benutzernamen und ein Passwort für diese angeben?

Antwort

26

Es gibt zwei verschiedene Möglichkeiten, wie Sie diese

# tun können 1

Documentation (Beachten Sie das Beispiel in der Dokumentation verwendet die Db-Objekt)

// Your code from the question 

// Listen for when the mongoclient is connected 
mongoclient.open(function(err, mongoclient) { 

    // Then select a database 
    var db = mongoclient.db("exampledatabase"); 

    // Then you can authorize your self 
    db.authenticate('username', 'password', function(err, result) { 
    // On authorized result=true 
    // Not authorized result=false 

    // If authorized you can use the database in the db variable 
    }); 
}); 

# 2

Documentation MongoClient.connect
Documentation The URL
A Ich mag viel mehr, weil es kleiner und einfacher zu lesen ist.

// Just this code nothing more 

var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect("mongodb://username:[email protected]:27017/exampledatabase", function(err, db) { 
    // Now you can use the database in the db variable 
}); 
+1

Ja, nach einigem Umgraben scheint es, als ob die einzige Möglichkeit zur Authentifizierung auf der db-Ebene ist, nicht auf dem Server. Das macht also Sinn. Ich ging mit # 2. –

1

Danke Mattias für die richtige Antwort.

Ich möchte hinzufügen, dass Sie manchmal Anmeldeinformationen von einer Datenbank haben, während Sie mit einem anderen verbinden möchten. In diesem Fall können Sie den URL-Weg weiterhin verwenden, um eine Verbindung herzustellen, indem Sie einfach den Parameter ?authSource= zu URL hinzufügen.

Nehmen wir zum Beispiel an, Sie verfügen über Administratorberechtigungen aus der Datenbank admin und möchten eine Verbindung mit der Datenbank mydb herstellen. Sie können es die folgende Art und Weise tun:

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

(async() => { 

    const db = await MongoClient.connect('mongodb://adminUsername:[email protected]:27017/mydb?authSource=admin'); 

    // now you can use db: 
    const collection = await db.collection('mycollection'); 
    const records = await collection.find().toArray(); 
    ... 

})(); 

Auch, wenn Ihr Passwort Sonderzeichen enthält, können Sie immer noch URL Art und Weise wie diese verwenden:

const dbUrl = `mongodb://adminUsername:${encodeURIComponent(adminPassword)}@localhost:27017/mydb?authSource=admin`; 
    const db = await MongoClient.connect(dbUrl); 

Hinweis: In früheren Versionen { uri_decode_auth: true } Option erforderlich war, (als zweiter Parameter zu connect Methode) bei der Verwendung von für Benutzername oder Passwort, aber jetzt ist diese Option veraltet, es funktioniert gut ohne sie.

Verwandte Themen