Node.js中MongoDB警告问题解决及错误回溯方法
代码示例
以下是使用Mongoose实现的MongoDB连接代码:
const connectDB = () => { mongoose .connect(`mongodb://${config.db.host}:${config.db.port}/${config.db.name}`, {useUnifiedTopology: true, useNewUrlParser: true}) .then(() => { console.log("DB connection successful."); }) .catch((err) => { console.log(`DB connection error:${err}`); }); }
出现的警告信息
(node:17692) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated
option: useNewUrlParser has no effect since Node.js Driver version
4.0.0 and will be removed in the next major version (Usenode --trace-warnings ...to show where the warning was created)
(node:17692) [MONGODB DRIVER] Warning: useUnifiedTopology is a
deprecated option: useUnifiedTopology has no effect since Node.js
Driver version 4.0.0 and will be removed in the next major version
警告含义
这两个警告指向的配置选项useNewUrlParser和useUnifiedTopology是MongoDB Node.js驱动旧版本的兼容过渡选项:
useNewUrlParser:曾用于启用新版MongoDB连接URL解析器,替代旧版解析逻辑useUnifiedTopology:用于启用统一的拓扑管理引擎,优化连接池和集群处理逻辑
从MongoDB Node.js驱动4.0.0版本开始,这两个选项对应的功能已经成为默认行为,手动设置它们不再产生任何效果,且这些选项会在驱动的下一个大版本中被彻底移除,因此驱动抛出废弃警告提示开发者清理冗余配置。
警告消除方法
直接从mongoose.connect的配置参数中删除这两个废弃选项即可,修改后的代码如下:
const connectDB = () => { mongoose .connect(`mongodb://${config.db.host}:${config.db.port}/${config.db.name}`) .then(() => { console.log("DB connection successful."); }) .catch((err) => { console.log(`DB connection error:${err}`); }); }
当前版本的Mongoose依赖的MongoDB驱动已默认启用这两项功能,删除后不会影响数据库连接和操作的正常运行。
node --trace-warnings命令用法
在启动Node.js应用时,将--trace-warnings参数添加到启动命令开头,就能打印出警告的完整调用栈,帮助定位触发警告的代码位置。
示例命令:
node --trace-warnings your-app-entry-file.js
执行该命令后,控制台会输出警告的详细调用路径,包括触发警告的文件及代码行,方便开发者精准排查警告来源。
内容的提问来源于stack exchange,提问作者Dev Patel

