Mongoose 是 Node.js 中一个非常流行的 MongoDB 对象模型管理工具。其中,{useNewUrlParser: true}
是 Mongoose 的常见配置项之一。然而,这一配置项可能会导致一些错误,本文将介绍如何通过去除 {useNewUrlParser: true} 版本带来的影响来解决这些错误。
遇到的问题
当在项目中使用 Mongoose 时,有可能出现以下错误:
DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
这个错误表现为一个 DeprecationWarning 警告,并提示使用 { useNewUrlParser: true }
配置项。然而,当我们使用这个配置项后,可能会出现以下排除或难以解释的错误:
Error: The uri parameter to openUri() must be a string, got undefined
MongooseError: Operation `users.insertOne()` buffering timed out after 10000ms
这些错误不仅没有解决原始的 DeprecationWarning 警告,而且还使我们费尽心思地调试问题。
解决问题
为避免这些错误,我们可以尝试去除 { useNewUrlParser: true }
配置项。但这并不是完整的解决方案。在这里,我们提供两种有效的解决方案。
方案一:使用 mongodb://
链接
第一种方法是使用 mongodb://
链接代替 mongodb+srv://
链接。
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/myapp', {useNewUrlParser: true});
在使用 mongodb://
链接时,我们无需对 useNewUrlParser
进行配置,直接连接数据库即可。这是因为 mongodb://
链接已经默认使用了新的 URL 字符串解析器,无需手动配置。
方案二:使用 MongoClient
对象
第二种方法是使用 MongoClient
对象连接数据库。这种方法需要使用 mongodb
库,而不是 mongoose
库。
-- -------------------- ---- ------- ----- ------------- - ------------------- ----- --- - ----------------------------------------------------------------------------------------- ----- ------ - --- ---------------- ----------------- ------- ------------------ -- - ----- ---------- - ---------------------------------------- -- ---- --------------- ---
实际上,这种方法在原生 MongoDB 驱动程序中运作良好,但可能需要更多的代码处理,因此可能并不是每个人的最佳选择。
结论
在使用 Mongoose 链接 MongoDB 时,我们可能会遇到一些令人困惑的错误,而配置 { useNewUrlParser: true }
并不能彻底解决这些错误。 在这篇文章中,我们提供了两种有效的解决方案,分别是使用 mongodb://
链接和使用 MongoClient
对象。 无论哪种方法,都是基于新的 URL 字符串解析器,可以解决原来的 DeprecationWarning 警告并避免其他错误。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6730545eeedcc8a97c91a31e