通过将"useNewUrlParser"设置为true来避免“当前URL字符串解析器已弃用”的警告。

279

我有一个数据库包装类,它建立到某些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 来消除这些警告呢?这对我很重要,因为脚本应该作为计划任务运行,而这些警告会导致垃圾邮件满天飞。

我正在使用版本为 3.1.0-beta4mongodb 驱动程序,以及相应的 @types/mongodb 包在 3.0.18 中。它们都是使用 npm install 安装的最新版本。

解决方法

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

"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"

6
这是从 beta 版本中某种方式在周末发布到 npm 上的内容。在 API 确实最终确定之前,不要担心它。你做得很对,安装了一个稳定版本。 - Neil Lunn
1
在MongoDB 3.0.0以上的版本中,只需添加以下代码即可连接数据库: mongoose.connect("mongodb://localhost:portnumber/YourDB", { useNewUrlParser: true }) - Majedur
22个回答

0
(node:16596) DeprecationWarning: 当前的URL字符串解析器已经过时,并将在将来的版本中被删除。要使用新的解析器,请在MongoClient.connect中传递选项{useNewUrlParser:true}。(使用node --trace-deprecation ...显示警告创建的位置)(node:16596) [MONGODB DRIVER] 警告:当前的服务器发现和监视引擎已过时,并将在将来的版本中被删除。要使用新的服务器发现和监视引擎,请在MongoClient构造函数中传递选项{useUnifiedTopology:true}。 用法:
async connect(connectionString: string): Promise<void> {
        this.client = await MongoClient.connect(connectionString, {
    useUnifiedTopology: true,
    useNewUrlParser: true,
  })
        this.db = this.client.db()
}

0

如果usernamepassword中包含@字符,则按如下方式使用:

mongoose
    .connect(
        'DB_url',
        { user: '@dmin', pass: 'p@ssword', useNewUrlParser: true }
    )
    .then(() => console.log('Connected to MongoDB'))
    .catch(err => console.log('Could not connect to MongoDB', err));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接