Как указать имя пользователя и пароль mongodb с помощью экземпляра сервера?
Документация MongoClient показывает, как использовать экземпляр сервера для создания соединения:
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));
Как бы вы указали для этого имя пользователя и пароль?
Ответы
Ответ 1
Есть два разных способа сделать это
# 1
Документация (Обратите внимание, что в примере в документации используется объект 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
Документация MongoClient.connect
Документация URL
Мне нравится гораздо больше, потому что он меньше и легче читать.
// 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
});
Ответ 2
Спасибо Маттиасу за правильный ответ.
Я хотел бы добавить, что иногда у вас есть учетные данные из одной базы данных, а вы хотите подключиться к другой.
В этом случае вы все равно можете использовать способ URL для подключения, просто добавив параметр ?authSource=
в URL.
Например, скажем, у вас есть учетные данные администратора из базы данных admin
и хотите подключиться к базе данных mydb
. Вы можете сделать это следующим образом:
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();
...
})();
Кроме того, если ваш пароль содержит специальные символы, вы все равно можете использовать способ URL следующим образом:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent(adminPassword)}@localhost:27017/mydb?authSource=admin`;
const db = await MongoClient.connect(dbUrl);
Примечание. В более ранних версиях параметр { uri_decode_auth: true }
был необходим (как второй параметр для метода connect
) при использовании encodeURIComponent
для имени пользователя или пароля, однако теперь этот параметр устарел, он отлично работает без него.