Node.js 如何使用服务器实例指定mongodb用户名和密码?

Node.js 如何使用服务器实例指定mongodb用户名和密码?,node.js,mongodb,Node.js,Mongodb,文档显示了如何使用服务器实例创建连接: 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));

文档显示了如何使用服务器实例创建连接:

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 (注意文档中的示例使用Db对象)

#2

我更喜欢这种方式,因为它更小,更容易阅读

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

谢谢马蒂亚斯的正确回答

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

例如,假设您拥有来自数据库
admin
的管理员凭据,并且希望连接到数据库
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);

注意:在早期版本中,当使用
encodeURIComponent
作为用户名或密码时,需要使用
{uri\u decode\u auth:true}
选项(作为
connect
方法的第二个参数),但是现在这个选项已过时,没有它也可以正常工作。

是的,经过深入研究,似乎唯一的身份验证方法是在数据库级别,而不是服务器。所以这是有道理的。“我用的是#2”。@Mattias-如果有变化,请检查这个-
    const dbUrl = `mongodb://adminUsername:${encodeURIComponent(adminPassword)}@localhost:27017/mydb?authSource=admin`;
    const db = await MongoClient.connect(dbUrl);