MongoParseError: 选项 poolsize、usenewurlparse 不受支持。

21

当我运行"nodemon server "时,出现"MongoParseError: options poolsize, usenewurlparse are not supported"错误。

以下是设置mongodb连接的代码:

import app from "./server.js"
import mongodb from "mongodb"
import dotenv from "dotenv"

dotenv.config()
const MongoClient = mongodb.MongoClient

const port = process.env.PORT || 8000

MongoClient.connect(
  process.env.RESTREVIEWS_DB_URI,
  {
    poolSize: 50,
    wtimeout: 2500,
    useNewUrlParse: true,
    }
  )
  .catch(err => {
   
    console.error(err.stack)
    process.exit(1)
  })
  .then(async client => {
   
    app.listen(port, () => {
      console.log(`listening on port ${port}`)
    })
  })

你使用的驱动程序版本是哪个?他们刚刚发布了4.0版本,不再使用newUrlParser。https://github.com/mongodb/node-mongodb-native/blob/4.0/docs/CHANGES_4.0.0.md - Koodies
你的解决方案是什么? - Wang Liang
8个回答

26

一些MongoClient选项已被弃用。

MongoClient.connect(
    process.env.RESTREVIEWS_DB_URI,
    {
        maxPoolSize: 50, 
        wtimeoutMS: 2500,
        useNewUrlParser: true
    }

).catch(err => {
    console.error(err.stack)
    process.exit(1)
}

9
该版本停止支持poolsize、wtimeout和useNewUrlParse,请使用我的修改替换您的代码。
import app from "./server.js";
import mongodb from "mongodb"
import dotenv from "dotenv"
dotenv.config()
const MongoClient = mongodb.MongoClient

const port = process.env.PORT || 8000

MongoClient.connect(
    process.env.RESTREVIEWS_DB_URI,
    {
        maxPoolSize:50,
        wtimeoutMS:2500,
        useNewUrlParser:true
    }
)
.catch(err => {
    console.error(err.stack)
    process.exit(1)
})
.then(async client => {
    app.listen(port, () => {
        console.log('listening on port '+port)
    })
})

6

在将 MongoDB-native diver 升级到 4.x 后,您只需要更改 MongoClientOptions interface

您现在有:

MongoClient.connect(
  process.env.RESTREVIEWS_DB_URI,
  {
    poolSize: 50, // maxPoolSize
    wtimeout: 2500, // wtimeoutMS
    useNewUrlParse: true, // feel free to remove, no longer used by the driver.
    }
  )

你需要:

MongoClient.connect(
  process.env.RESTREVIEWS_DB_URI,
  {
    maxPoolSize: 50,
    wtimeoutMS: 2500,
  }
)

3

我曾经遇到过同样的问题,以下是我解决的方法:在你的代码中,替换

 {
    poolSize: 50,
    wtimeout: 2500,
    useNewUrlParse: true,
    }

使用

{
  
  maxPoolSize: 50,
  wtimeoutMS: 2500,
  useNewUrlParser: true,
}

2
const mongoose = require('mongoose');
require('dotenv').config();
const user = process.env.mongoUser;
const pass = process.env.mongoPass;
const url = `mongodb+srv://${user}:${pass}@cluster0.asqnt.mongodb.net/MyDB`;

mongoose.connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
})
.then(console.log('connecting'))
.catch(err => console.log(`error: ${err}`))

3
请不要仅仅发布代码作为答案,还要提供解释您的代码是如何解决问题的。带有解释的答案通常更有帮助和更高质量,并且更有可能吸引赞同。 - Tyler2P

1

我刚刚试图启动服务器,但是我注意到:

{
   useNewUrlParser: true,
   useUnifieldTopology: true,
   useFindAndModify: false
}

它们已经被弃用。并查看本文,唯一有效的是来自@Jinoy Varghese的那个。 我留下了我的蒙古配置代码以连接数据库。

const mongoose = require('mongoose')
require('dotenv').config({ path: '.env' })

const connectDB = async () => {
    try {
        await mongoose.connect(process.env.DB_MONGO, {
            maxPoolSize: 50,
            wtimeoutMS: 2500,
            useNewUrlParser: true
        })
        console.log('DB connected ')
    } catch (err) {
        console.log(err)
        process.exit(1)
    }
}
module.exports = connectDB

0

poolSize,wtimeout和useNewUrlParse已被弃用。请替换为maxPoolSize、wtimeoutMS和useNewUrlParser。如果不替换,您的代码将无法正常工作。


0

使用这个配置来操作mongoose

const express = require('express');
const mongoose = require('mongoose');

mongoose.Promise = global.Promise;
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);
mongoose.connect(your mongodb URI).then(()=> {
    app.listen(PORT, () => {
        console.log(`Listening on port` + PORT);
    })
}).catch((e) => {console.log(e)})

而且 app.listen 不是一个异步函数,所以你不需要使用 async。


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