21

MongoClient文档展示如何使用 Server 实例来创建连接:

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

您将如何为此指定用户名和密码?

4

2 回答 2

37

有两种不同的方法可以做到这一点

#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:password@localhost:27017/exampledatabase", function(err, db) {
  // Now you can use the database in the db variable
});
于 2012-12-26T21:17:01.407 回答
5

感谢马蒂亚斯的正确答案。

我想补充一点,有时您拥有来自一个数据库的凭据,同时又想连接到另一个数据库。在这种情况下,您仍然可以使用 URL 方式连接,只需?authSource=在 URL 中添加参数即可。

例如,假设您拥有来自 database 的管理员凭据admin,并且想要连接到 database mydb。您可以通过以下方式进行操作:

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

(async() => {

    const db = await MongoClient.connect('mongodb://adminUsername:adminPassword@localhost: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,但是现在此选项已过时,没有它也可以正常工作。

于 2017-12-15T23:06:21.953 回答