通过将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/mongodb软件包3.0.18两者都是最新可用的npm install

解决方法

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

"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
Tony凯2020/03/23 10:33:29

我使用mlab.com作为MongoDB数据库。我将连接字符串分离到另一个名为的config文件夹中,并在文件keys.js中保存了连接字符串:

module.exports = {
  mongoURI: "mongodb://username:password@ds147267.mlab.com:47267/projectname"
};

服务器代码是

const express = require("express");
const mongoose = require("mongoose");
const app = express();

// Database configuration
const db = require("./config/keys").mongoURI;

// Connect to MongoDB

mongoose
  .connect(
    db,
    { useNewUrlParser: true } // Need this for API support
  )
  .then(() => console.log("MongoDB connected"))
  .catch(err => console.log(err));

app.get("/", (req, res) => res.send("hello!!"));

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`)); // Tilde, not inverted comma

您需要像上面一样在连接字符串后编写{useNewUrlParser:true}。

简而言之,您需要执行以下操作:

mongoose.connect(connectionString,{ useNewUrlParser: true } 
// Or
MongoClient.connect(connectionString,{ useNewUrlParser: true } 
    

小小古一2020/03/23 10:33:29

我们正在使用:

mongoose.connect("mongodb://localhost/mean-course").then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Connection to database failed.");
});

→这给出了URL解析器错误

正确的语法是:

mongoose.connect("mongodb://localhost:27017/mean-course" , { useNewUrlParser: true }).then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Connection to database failed.");
});
猪猪小卤蛋2020/03/23 10:33:29

这就是我的方法。直到我几天前更新npm时,该提示才在控制台上显示。

.connect具有三个参数,即URI,选项和err。

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) 
            throw err;
        console.log(`Successfully connected to database.`);
    }
);
小胖2020/03/23 10:33:28

您只需要添加

{ useNewUrlParser: true }

在mongoose.connect方法中。

2020/03/23 10:33:28

可以通过提供端口号并使用以下解析器来解决此问题: {useNewUrlParser: true}

解决方案可以是:

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

它解决了我的问题。

西里神奇2020/03/23 10:33:28

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

如果您已经要使用新的URL解析器,则取决于您。最终,当MongoDB切换到其新的URL解析器时,警告将消失。

如“ 连接字符串URI格式”中指定的那样,您无需设置端口号。

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

达蒙2020/03/23 10:33:28

检查您的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 以获取详细信息。