在使用 Mongoose 连接 MongoDB 数据库时,有时会出现 "URI malformed" 错误,这种错误通常是由于连接字符串格式不正确导致的。下面介绍一些常见的出现这种错误的原因及解决方法。
1. 连接字符串格式错误
在连接 MongoDB 数据库时,必须使用正确的连接字符串格式。连接字符串包含了 MongoDB 数据库的地址、端口号、数据库名称和认证信息等。如果连接字符串格式不正确,就会出现 "URI malformed" 错误。
下面是一个正确的连接字符串的例子:
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true });其中,mongodb:// 是协议名称,localhost 是 MongoDB 数据库的地址,27017 是 MongoDB 数据库的端口号,mydatabase 是数据库名称。在这个例子中,我们没有提供认证信息,如果需要认证,可以在连接字符串中添加用户名和密码,如下所示:
mongoose.connect('mongodb://username:password@localhost:27017/mydatabase', { useNewUrlParser: true });2. 特殊字符未进行 URL 编码
在连接字符串中,如果包含了一些特殊字符,比如 @、:、/ 等,需要进行 URL 编码。否则,这些特殊字符会被解析成连接字符串的一部分,导致格式错误。
下面是一个未进行 URL 编码的连接字符串的例子:
mongoose.connect('mongodb://username:password@localhost:27017/mydatabase?authSource=admin&ssl=false');在这个例子中,@ 和 : 字符没有进行 URL 编码,导致连接字符串格式错误。应该将 @ 编码成 %40,将 : 编码成 %3A,如下所示:
mongoose.connect('mongodb://username:password%40localhost%3A27017/mydatabase?authSource=admin&ssl=false', { useNewUrlParser: true });3. 连接字符串中包含空格
在连接字符串中,不能包含空格,否则会导致连接字符串格式错误。如果需要在连接字符串中包含空格,可以使用 %20 进行 URL 编码。
下面是一个包含空格的连接字符串的例子:
mongoose.connect('mongodb://localhost:27017/my database', { useNewUrlParser: true });在这个例子中,连接字符串中包含了一个空格,导致连接字符串格式错误。应该将空格编码成 %20,如下所示:
mongoose.connect('mongodb://localhost:27017/my%20database', { useNewUrlParser: true });4. 示例代码
下面是一个完整的示例代码,演示了如何使用 Mongoose 连接 MongoDB 数据库:
// www.javascriptcn.com code example
const mongoose = require('mongoose');
const uri = 'mongodb://username:password@localhost:27017/mydatabase';
mongoose.connect(uri, { useNewUrlParser: true })
.then(() => {
console.log('Connected to MongoDB');
})
.catch((err) => {
console.error(err);
});在这个示例代码中,我们使用了 mongoose.connect() 方法连接 MongoDB 数据库。连接字符串中包含了用户名、密码、地址、端口号和数据库名称等信息。在 mongoose.connect() 方法中,我们还传递了一个选项对象 { useNewUrlParser: true },告诉 Mongoose 使用新的 URL 解析器。如果不传递这个选项,会出现一个警告信息。如果连接成功,就会输出一条信息 "Connected to MongoDB",否则会输出错误信息。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d96e9fa941bf713410d301