Избегайте предупреждения «Текущий анализатор строк URL устарел», установив для useNewUrlParser значение true - PullRequest
0 голосов
/ 21 мая 2018

У меня есть класс-оболочка базы данных, который устанавливает соединение с некоторым экземпляром MongoDB:

async connect(connectionString: string): Promise<void> {
        this.client = await MongoClient.connect(connectionString)
        this.db = this.client.db()
}

Это выдало мне предупреждение:

(узел: 4833) DeprecationWarning: currentАнализатор строки URL устарел и будет удален в следующей версии.Чтобы использовать новый анализатор, передайте option {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"

Ответы [ 16 ]

0 голосов
/ 21 апреля 2019

Полный пример для ExpressJS, случая вызова API и отправки JSON:

...
app.get('/api/myApi', (req, res) => {
  MongoClient.connect('mongodb://user:password@domain.com:port/dbname',
    { useNewUrlParser: true }, (err, db) => {

      if (err) throw err
      const dbo = db.db('dbname')
      dbo.collection('myCollection')
        .find({}, { _id: 0 })
        .sort({ _id: -1 })
        .toArray(
          (errFind, result) => {
            if (errFind) throw errFind
            const resultJson = JSON.stringify(result)
            console.log('find:', resultJson)
            res.send(resultJson)
            db.close()
          },
        )
    })
}
0 голосов
/ 29 января 2019

Обновлено для ES8 / await

Неверный Демо-код ES8, предоставляемый MongoDB inc * , также создает это предупреждение.

MongoDB предоставляет следующий совет, который является неправильным

Чтобы использовать новый синтаксический анализатор, передайте параметр {useNewUrlParser: true} в MongoClient.connect.

Выполнение этого приведет к следующей ошибке:

TypeError: конечный аргумент executeOperation должен быть обратным вызовом

Вместо theопция должна быть предоставлена ​​для new 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
}
0 голосов
/ 19 марта 2019

вам просто нужно добавить

{useNewUrlParser: true}

внутри метода mongoose.connect

0 голосов
/ 06 ноября 2018

Формат строки подключения должен быть mongodb: // пользователь: пароль @ хост: порт / дБ

например:

MongoClient.connect('mongodb://user:password@127.0.0.1:27017/yourDB', { useNewUrlParser: true } )
0 голосов
/ 29 января 2019

Если username или password имеет символ @.Тогда используйте вот так

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));
0 голосов
/ 22 сентября 2018

Не думаю, что вам нужно добавлять { useNewUrlParser: true }.

Вам решать, хотите ли вы уже использовать новый анализатор URL.В конце концов, предупреждение исчезнет, ​​когда mongo переключится на свой новый анализатор URL.

Редактировать: Как указано здесь https://docs.mongodb.com/master/reference/connection-string/ вам не нужно устанавливать номер порта.

Достаточно просто добавить { useNewUrlParser: true }.

0 голосов
/ 06 октября 2018

Необходимо добавить { useNewUrlParser: true } в методе mongoose.connect ().

mongoose.connect('mongodb://localhost:27017/Notification',{ useNewUrlParser: true });
0 голосов
/ 16 августа 2018

Ниже выделенного кода для подключения к mongoose устранено предупреждение для драйвера mongoose

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
0 голосов
/ 10 сентября 2018

Эти строки также помогли всем остальным предупреждениям об устаревании:

const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);
0 голосов
/ 04 августа 2018
**We were using** 
mongoose.connect("mongodb://localhost/mean-course").then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Conntection to database failed.");
});

*-----> This gives url parser error*



**Correct Syntax is**:

mongoose.connect("mongodb://localhost:27017/mean-course" , { useNewUrlParser: true }).then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Conntection to database failed.");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...