我有一个数据库包装类,建立一个连接到一些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,但它对那些警告没有影响。

那么我怎么能设置useneurlparser删除这些警告?这对我来说很重要,因为脚本应该以cron的方式运行,而这些警告会导致垃圾邮件。

我使用3.1.0-beta4版本的mongodb驱动程序,并在3.0.18中使用相应的@types/mongodb包。它们都是npm install可用的最新版本。

解决方案

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

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

当前回答

下面的方法对我有用

const mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/playground", { useNewUrlParser: true,useUnifiedTopology: true })
.then(res => console.log('Connected to db'));

猫鼬版本是5.8.10。

其他回答

如果用户名或密码有@字符,那么像这样使用它:

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));

下面突出显示的猫鼬连接代码解决了猫鼬驱动程序的警告:

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });

我使用的是猫鼬版本5。X表示我的项目。在需要mongoose包后,全局设置如下所示。

const mongoose = require('mongoose');

// Set the global useNewUrlParser option to turn on useNewUrlParser for every connection by default.
mongoose.set('useNewUrlParser', true);

更新为ECMAScript 8 / await

MongoDB公司提供的错误的ECMAScript 8演示代码也会产生此警告。

MongoDB提供了如下建议,不正确

要使用新的解析器,将选项{useNewUrlParser: true}传递给MongoClient.connect。

这样做将导致以下错误:

executeOperation的最终参数必须是一个回调

相反,这个选项必须提供给新的MongoClient:

请看下面的代码:

const DATABASE_NAME = 'mydatabase',
    URL = `mongodb://localhost:27017/${DATABASE_NAME}`

module.exports = async function() {
    const client = new MongoClient(URL, {useNewUrlParser: true})
    var db = null
    try {
        // Note this breaks.
        // await client.connect({useNewUrlParser: true})
        await client.connect()
        db = client.db(DATABASE_NAME)
    } catch (err) {
        console.log(err.stack)
    }

    return db
}

我认为你不需要添加{useNewUrlParser: true}。

是否使用新的URL解析器由您自己决定。最终,当MongoDB切换到新的URL解析器时,这个警告就会消失。

如Connection String URI Format中所述,不需要设置端口号。

只要添加{useNewUrlParser: true}就足够了。