在使用 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 数据库:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- --- - --------------------------------------------------------- --------------------- - ---------------- ---- -- -------- -- - ---------------------- -- ---------- -- ------------ -- - ------------------- ---
在这个示例代码中,我们使用了 mongoose.connect()
方法连接 MongoDB 数据库。连接字符串中包含了用户名、密码、地址、端口号和数据库名称等信息。在 mongoose.connect()
方法中,我们还传递了一个选项对象 { useNewUrlParser: true }
,告诉 Mongoose 使用新的 URL 解析器。如果不传递这个选项,会出现一个警告信息。如果连接成功,就会输出一条信息 "Connected to MongoDB",否则会输出错误信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d96e9fa941bf713410d301