2012-12-26 9 views
10

Dokumentacja MongoClient pokazuje, jak korzystać z instancji serwera do utworzenia połączenia:W jaki sposób można określić nazwę użytkownika i hasło mongodb za pomocą instancji serwera?

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)); 

Jak byś podać nazwę użytkownika i hasło do tego?

Odpowiedz

26

Istnieją dwa różne sposoby, można to zrobić

# 1

Documentation (uwaga na przykład w dokumentacji używa obiektu dB)

// 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 sposób ja lubię dużo więcej, ponieważ jest mniejszy i łatwiejszy do odczytania.

// 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

Po kilku kopaniu wydaje się, że jedynym sposobem uwierzytelnienia jest poziom db, a nie serwer. To ma sens. Poszedłem z # 2. –

1

Dzięki Mattias za poprawną odpowiedź.

Chciałbym dodać, że czasami masz poświadczenia z jednej bazy danych, a chcesz połączyć się z inną. W takim przypadku można nadal używać metody adresu URL do połączenia, po prostu dodając parametr ?authSource= do adresu URL.

Na przykład powiedzmy, że masz poświadczenia administratora z bazy danych admin i chcesz połączyć się z bazą danych mydb. Można to zrobić w następujący sposób:

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(); 
    ... 

})(); 

Ponadto, jeśli hasło zawiera znaki specjalne, nadal można używać URL sposób tak:

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

Uwaga: We wcześniejszych wersjach { uri_decode_auth: true } opcja była wymagana (jako drugi parametr metody connect) podczas używania nazwy użytkownika lub hasła przy użyciu encodeURIComponent, jednak teraz ta opcja jest przestarzała, działa bez niej.

Powiązane problemy