我有一个数据库包装类,它 Build 与某些MongoDB实例的连接:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
这给了我一个警告:
(node:4833)DeprecationWarning:不推荐使用当前URL字符串解析器,将来的版本将删除它 . 要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect .
connect()
方法接受 MongoClientOptions
实例作为第二个参数 . 但它没有名为 useNewUrlParser
的属性 . 我也尝试在连接字符串中设置这些属性,如下所示: mongodb://127.0.0.1/my-db?useNewUrlParser=true
但它对这些警告没有影响 .
那么如何设置 useNewUrlParser
来删除那些警告呢?这对我很重要,因为脚本应该以cron身份运行,而这些警告会导致垃圾邮件垃圾邮件 .
我在版本 3.1.0-beta4
中使用了 mongodb
驱动程序,并在 3.0.18
中使用了相应的 @types/mongodb
包 . 它们都是使用 npm install
的最新版本 .
解决方法
使用旧版本的mongodb驱动程序:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
15 回答
检查你的mongo版本
如果您使用的是版本> = 3.1.0,请将mongo连接文件更改为 - >
或者您的mongoose连接文件 - >
理想情况下,它是版本4的功能,但v3.1.0及更高版本也支持它 . 有关详细信息,请查看MongoDB Github .
正如所指出的那样,驱动程序的
3.1.0-beta4
版本因为外观而早早得到了"released into the wild" . 该版本是正在进行的工作的一部分,以支持MongoDB 4.0即将发布的版本中的新功能,并进行一些其他API更改 .触发当前警告的一个此类更改是
useNewUrlParser
选项,因为有关如何传递连接URI实际工作的一些更改 . 稍后会详细介绍 .直到事情"settle down",它至少可能是advisable to "pin"至
3.0.x
版本的次要版本:这应该会阻止
3.1.x
分支安装在节点模块的"fresh"上 . 如果你已经安装了一个"latest"版本"beta"版本,那么你应该清理你的软件包(和package-lock.json
),并确保将其降低到3.0.x
系列版本 .至于实际使用"new"连接URI选项,主要限制是在连接字符串上实际包含
port
:这是新代码中的更多"strict"规则 . 重点是当前代码本质上是"node-native-driver"(npm mongodb)存储库代码的一部分,"new code"实际上是从mongodb-core库中导入"underpins" "public"节点驱动程序 .
通过向新代码添加选项来添加"option"的转换是"ease"转换,以便在添加选项和清除弃用警告的代码中使用较新的解析器(实际上基于url),从而验证您的连接字符串传入实际上符合新解析器期望的内容 .
在将来的版本中,将删除“遗留”解析器,然后即使没有该选项,新解析器也将简单地使用 . 但到那时,预计所有现有代码都有充分的机会根据新解析器所期望的内容测试现有连接字符串 .
因此,如果您希望在发布时使用新的驱动程序功能,请使用可用的
beta
及后续版本,理想情况下,通过启用MongoClient.connect()
中的useNewUrlParser
选项,确保提供对新解析器有效的连接字符串 .如果您实际上不需要访问与MongoDB 4.0版本预览相关的功能,请将版本固定为
3.0.x
系列,如前所述 . 这将按照文档和"pinning"工作,这确保3.1.x
版本不会超过预期的依赖关系,直到您确实要安装稳定版本 .下面突出显示的mongoose连接代码解决了猫鼬驱动程序的警告
没有什么可以改变,只在连接函数
{useNewUrlParser: true }
传递这将工作需要在mongoose.connect()方法中添加 .
连接字符串格式必须为 mongodb://user:password@host:port/db
例如:
通过提供端口号并使用此解析器{useNewUrlParser:true}可以解决该问题 . 解决方案可以是:
它解决了我的问题 .
一世不认为你需要添加
{ useNewUrlParser: true }
.如果你想使用新的url解析器,这取决于你 . 最终,当mongo切换到新的url解析器时,警告将消失 .
Edit: 如此处指定的https://docs.mongodb.com/master/reference/connection-string/,您无需设置端口号 .
Just adding is enough.
这是我的方式,在我几天前更新npm之前,提示没有显示在我的控制台上 .
.connect有3个参数,URI,选项和错误 .
更新了ES8 / await
不正确的ES8 demo code MongoDB inc provides也会创建此警告 .
MongoDB provides the following advice, which is incorrect
这样做会导致以下错误:
相反 the option must be provided to new MongoClient :
请参阅以下代码:
我使用mlab.com作为mongo数据库 . 我将连接字符串分隔到一个名为config的不同文件夹,并在keys.js内部保留了连接字符串
和服务器代码是
您需要在连接字符串之后写{useNewUrlParser:true},如上所述 .
简单地说你需要做:
这些行也为所有其他弃用警告提供了技巧:
如果
username
或password
具有@
字符 . 然后像这样使用你只需要添加
在mongoose.connect方法中