Nodejs 当mongodb开启用户认证后(auth=true),如何使用mongoose链接数据库

Nodejs 当mongodb开启用户认证后(auth=true),如何使用mongoose链接数据库

mongoose 连接db的方式

mongoose.connect('mongodb://username:password[@host](/user/host):port/database?options...');

不过前提是,你这个用户有操作数据库的权限。

输入 ./mongo 进入控制台,切换到 指定的数据库


show users
{
	"_id" : "test.liux",
	"user" : "liux",
	"db" : "test",
	"roles" : [
		{
			"role" : "dbOwner",
			"db" : "test"
		}
	]
}

db 的名字是test ,能够登陆的用户是 liux 不知道你的是否是这样。如果两项都满足,肯定能登陆成功的


6 回复

当然,我可以帮助你编写关于如何在 MongoDB 开启用户认证后使用 Mongoose 连接到数据库的详细示例。

如何在 MongoDB 开启用户认证后使用 Mongoose 连接数据库

当你在 MongoDB 中开启了用户认证(即 auth=true),你需要确保你使用的连接字符串中包含了正确的用户名、密码以及相关的认证信息。下面是具体的步骤和示例代码:

步骤 1: 创建 MongoDB 用户并赋予相应的权限

首先,你需要创建一个用户,并赋予其对数据库的操作权限。例如,假设你要创建一个用户 liux 并赋予其 test 数据库的所有权限:

mongo

进入 MongoDB shell 后,运行以下命令:

use test
db.createUser({
  user: "liux",
  pwd: "yourpassword",
  roles: [{ role: "readWrite", db: "test" }]
})

这将创建一个名为 liux 的用户,密码为 yourpassword,并且该用户具有 test 数据库的读写权限。

步骤 2: 使用 Mongoose 连接到 MongoDB

接下来,你需要在 Node.js 应用程序中使用 Mongoose 连接到 MongoDB。确保你的 package.json 文件中包含 mongoose 依赖。

{
  "dependencies": {
    "mongoose": "^5.13.4"
  }
}

然后,在你的应用程序中使用 Mongoose 连接到数据库。这里是一个简单的示例:

const mongoose = require('mongoose');

// 替换以下内容为你自己的 MongoDB 连接字符串
const dbURI = 'mongodb://liux:yourpassword@localhost:27017/test?authSource=admin';

mongoose.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('MongoDB connected...'))
  .catch(err => console.error('Could not connect to MongoDB...', err));

// 示例 Schema 和 Model
const mySchema = new mongoose.Schema({
  name: String,
  age: Number
});

const MyModel = mongoose.model('MyModel', mySchema);

// 示例操作
const myDoc = new MyModel({ name: 'John Doe', age: 30 });
myDoc.save()
  .then(() => console.log('Document saved!'))
  .catch(err => console.error('Error saving document:', err));

在这个示例中,我们使用了 mongoose.connect() 方法来连接到 MongoDB。连接字符串包含了用户名 (liux) 和密码 (yourpassword),并且指定了数据库 (test) 和端口 (27017)。authSource=admin 参数表示认证是在 admin 数据库中进行的。

总结

通过上述步骤,你可以成功地在 MongoDB 开启用户认证的情况下,使用 Mongoose 连接到数据库。确保你已经正确地设置了用户和权限,并且在连接字符串中提供了正确的认证信息。


mongoose 的 open 发现有个坑!我改成 openSet 就可以了,比如: db.openSet(“mongodb://admin:pass@192.168.1.100:27017/mydb”);

请问,同样的问题,试了n多方法,包括你的方法,依然报错,详见这个帖子

如果密码中有@这样的字符如何办?

如果 mongo 里用 db.createUser( { user: “root”, pwd: “adminpwd”, roles: [ “root” ] } ) 创建用户的话 moogoose 这样 connect 就可以了

mongoose.connect('mongodb://root:adminpwd[@127](/user/127):0:0:1:27017/db?authSource=admin')

当 MongoDB 开启了用户认证(auth=true)之后,使用 Mongoose 连接到 MongoDB 数据库需要提供正确的用户名和密码进行身份验证。以下是具体的连接步骤和示例代码。

示例代码

const mongoose = require('mongoose');

// 定义 MongoDB 连接字符串
const uri = 'mongodb://username:password[@host](/user/host):port/database';

// 使用 Mongoose 连接到 MongoDB
mongoose.connect(uri, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    auth: {
        user: 'username', // MongoDB 用户名
        password: 'password' // MongoDB 密码
    }
})
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Failed to connect to MongoDB', err));

解释

  1. 引入 Mongoose

    const mongoose = require('mongoose');
    
  2. 定义连接字符串

    • username 是你在 MongoDB 中创建的用户名。
    • password 是对应的密码。
    • hostport 是 MongoDB 服务器的地址和端口。
    • database 是你要连接的数据库名称。
    const uri = 'mongodb://username:password[@host](/user/host):port/database';
    
  3. 连接到 MongoDB

    • 使用 mongoose.connect() 方法连接到 MongoDB。
    • useNewUrlParser: trueuseUnifiedTopology: true 是为了确保兼容性和安全性。
    • auth 对象中包含 userpassword 字段来指定认证信息。
    mongoose.connect(uri, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        auth: {
            user: 'username',
            password: 'password'
        }
    });
    
  4. 错误处理

    • catch 块中处理连接错误并输出错误信息。

通过以上步骤,你就可以成功地在 MongoDB 开启用户认证的情况下使用 Mongoose 连接到数据库。

回到顶部