通过将useNewUrlParser设置为true来避免“不建议使用当前URL字符串解析器”警告

我有一个数据库包装器类,用于建立与某些MongoDB实例的连接:


async connect(connectionString: string): Promise<void> {

        this.client = await MongoClient.connect(connectionString)

        this.db = this.client.db()

}

这给了我一个警告:


(节点:4833)DeprecationWarning:不建议使用当前的URL字符串解析器,并将在以后的版本中将其删除。要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect。


该connect()方法接受一个MongoClientOptions实例作为第二个参数。但是它没有名为的属性useNewUrlParser。我也试图像这样在连接字符串中设置那些属性:mongodb://127.0.0.1/my-db?useNewUrlParser=true但是它对那些警告没有影响。


那么我该如何设置useNewUrlParser删除那些警告?这对我很重要,因为脚本应作为cron运行,并且这些警告会导致垃圾邮件垃圾邮件。


我正在使用带有相应包的mongodb版本的驱动程序。两者都是最新可用的。3.1.0-beta4@types/mongodb3.0.18npm install


解决方法

使用旧版本的mongodb驱动程序:


"mongodb": "~3.0.8",

"@types/mongodb": "~3.0.18"


慕桂英546537
浏览 8426回答 3
3回答

当年话下

检查您的mongo版本mongo --version如果您使用的版本> = 3.1.0,请将mongo连接文件更改为->MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })或您的猫鼬连接文件--mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });理想情况下,它是第4版功能,但v3.1.0及更高版本也支持它。 有关详细信息,请查看MongoDB Github。

小唯快跑啊

如前所述3.1.0-beta4,从外观上看,驱动程序的发布“早已被释放”。该版本是正在进行的工作的一部分,以支持MongoDB 4.0即将发布的版本中的较新功能并进行其他一些API更改。useNewUrlParser由于围绕连接URI实际工作方式的一些更改,该选项之一就是触发当前警告。以后再说。在问题“解决”之前,建议至少将其“固定”在次要版本上以进行3.0.x发布:&nbsp; "dependencies": {&nbsp; &nbsp; "mongodb": "~3.0.8"&nbsp; }这应该停止3.1.x在“新”安装中将分支安装到节点模块。如果您已经安装了“ beta”版本的“最新”版本,则应清理软件包(和package-lock.json),并确保将其降级为3.0.x系列版本。至于实际使用“新”连接URI选项,主要限制是实际port在连接字符串上包括:const { MongoClient } = require("mongodb");const uri = 'mongodb://localhost:27017';&nbsp; // mongodb://localhost - will fail(async function() {&nbsp; try {&nbsp; &nbsp; const client = await MongoClient.connect(uri,{ useNewUrlParser: true });&nbsp; &nbsp; // ... anything&nbsp; &nbsp; client.close();&nbsp; } catch(e) {&nbsp; &nbsp; console.error(e)&nbsp; }})()在新代码中,这是一个更“严格”的规则。要点在于,当前代码本质上是“ node-native-driver”(npm mongodb)存储库代码的一部分,而“ new code”实际上是从mongodb-core库中导入的,从而“巩固”了“ public”节点驱动程序。添加“选项”的目的是通过将选项添加到新代码中来“简化”过渡,以便在添加选项的代码中使用较新的解析器(实际上基于url),并清除弃用警告,从而验证您传入的连接字符串实际上符合新解析器的预期。在将来的版本中,将删除“旧版”解析器,然后即使没有该选项,也将使用新的解析器。但是到那时,可以预期所有现有代码都有足够的机会根据新解析器的预期测试其现有连接字符串。因此,如果您要在发布新的驱动程序功能时开始使用它们,请使用可用的beta版本和后续版本,并且最好通过启用中的useNewUrlParser选项来确保您提供的连接字符串对于新的解析器有效MongoClient.connect()。如果您实际上不需要访问与MongoDB 4.0发行版预览有关的功能,请将该版本固定到3.0.x前面提到的系列。这将按文档所述进行,并且“固定”这可确保3.1.x在您实际要安装稳定的版本之前,不会在预期的依赖项上“更新”发行版。

潇潇雨雨

没什么改变,只通过连接功能{useNewUrlParser: true }就可以了MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){&nbsp; if(err){&nbsp; &nbsp; &nbsp; console.log(err);&nbsp; }&nbsp; else {&nbsp; &nbsp; &nbsp; console.log('connected to '+ url);&nbsp; &nbsp; &nbsp; db.close();&nbsp; }})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB
Node.js