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 不知道你的是否是这样。如果两项都满足,肯定能登陆成功的
当然,我可以帮助你编写关于如何在 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));
解释
-
引入 Mongoose:
const mongoose = require('mongoose');
-
定义连接字符串:
username
是你在 MongoDB 中创建的用户名。password
是对应的密码。host
和port
是 MongoDB 服务器的地址和端口。database
是你要连接的数据库名称。
const uri = 'mongodb://username:password[@host](/user/host):port/database';
-
连接到 MongoDB:
- 使用
mongoose.connect()
方法连接到 MongoDB。 useNewUrlParser: true
和useUnifiedTopology: true
是为了确保兼容性和安全性。auth
对象中包含user
和password
字段来指定认证信息。
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true, auth: { user: 'username', password: 'password' } });
- 使用
-
错误处理:
- 在
catch
块中处理连接错误并输出错误信息。
- 在
通过以上步骤,你就可以成功地在 MongoDB 开启用户认证的情况下使用 Mongoose 连接到数据库。