我有一个数据库封装类,它建立了一个与某个MongoDB实例的连接。
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
这给了我一个警告。
(node:4833) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version.要使用新的解析器,请将选项{ useNewUrlParser: true }传递给MongoClient.connect。
connect()
方法接受一个MongoClientOptions
实例作为第二个参数。但它没有一个名为useNewUrlParser'的属性。我也试着在连接字符串中设置这些属性,像这样。
mongodb:/127.0.0.1/my-db?useNewUrlParser=true`但对这些警告没有影响。
那么,我如何设置useNewUrlParser
来消除这些警告?这对我很重要,因为这个脚本应该作为cron运行,而这些警告会导致垃圾邮件。
我使用mongodb'驱动的版本是
3.1.0-beta4',相应的@types/mongodb'软件包是
3.0.18'。这两个包都是最新的,可以使用 "npm install"。
使用旧版本的mongodb驱动。
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
检查你的mongo版本
mongo --version
如果你使用的是>=3.1.0版本,请将你的mongo连接文件改为->。
MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })
或者你的mongoose连接文件改为->
mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });
理想情况下,这是一个版本4的功能,但v3.1.0及以上版本也支持它。请查看MongoDB Github了解详情。
如前所述,"3.1.0-beta4 "版本的驱动被"发布到野外",看起来有点早。该版本是正在进行的工作的一部分,以支持MongoDB 4.0即将发布的新功能,并做出一些其他的API变化。
触发当前警告的一个变化是 "使用新的UrlParser "选项,这是因为在传递连接URI的实际工作方式上有一些变化。稍后会有更多关于这个问题的内容。
在事情稳定下来之前,可能建议至少在3.0.x
版本中使用次要版本。
"dependencies": {
"mongodb": "~3.0.8"
}
这应该能阻止3.1.x
分支被安装在"fresh"安装到节点模块。如果你已经安装了一个"最新"版本,也就是"beta"版本,那么你应该清理你的软件包(和package-lock.json
),并确保你把它升级到3.0.x
系列版本。
至于实际使用"new"连接URI选项,主要限制是在连接字符串中实际包括`port'。
const { MongoClient } = require("mongodb");
const uri = 'mongodb://localhost:27017'; // mongodb://localhost - will fail
(async function() {
try {
const client = await MongoClient.connect(uri,{ useNewUrlParser: true });
// ... anything
client.close();
} catch(e) {
console.error(e)
}
})()
这在新代码中是一个更严格的规则。主要的一点是,目前的代码基本上是"node-native-driver" ( npm mongodb
) 仓库代码的一部分,而"新代码"实际上是导入mongodb-core
库,它是"公共"node驱动的基础。
添加"选项"的目的是"缓解"过渡,在新的代码中添加选项,这样较新的解析器(实际上是基于url
)就被用于添加选项的代码中,并清除弃用警告,从而验证你传递的连接字符串实际上符合新解析器所期望的。
在未来的版本中,'legacy'解析器将被移除,然后新的解析器将被简单地使用,即使没有这个选项。但到那时,预计所有现有的代码都有充分的机会来测试他们现有的连接字符串与新的分析器所期望的内容。
因此,如果你想在新驱动程序发布时开始使用它们,那么请使用可用的 "beta "和后续版本,最好确保你提供的连接字符串对新解析器有效,在MongoClient.connect()
中启用useNewUrlParser
选项。
如果你实际上不需要访问与MongoDB 4.0版本预览有关的功能,那么如前所述,将版本固定为3.0.x
系列。这将按照文件规定进行,并且"pinning"这确保了3.1.x
版本不会"更新"超过预期的依赖性,直到你真正想要安装稳定版本。
没有什么要改变的,只需在连接函数中传递{useNewUrlParser: true }
就可以了
MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
if(err){
console.log(err);
}
else {
console.log('connected to '+ url);
db.close();
}
})