Избегайте предупреждения «Текущий анализатор строк 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 голосов
/ 16 августа 2018

Я использовал mlab.com в качестве базы данных Монго.Я разделил строку подключения к другой папке с именем 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();

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

//connect to mongo DB

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}`)); //tilda not inverted comma

вам необходимо написать {useNewUrlParser: true} после строки подключения, как я делал выше.

Проще говоря, вам нужно сделать:

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


      
0 голосов
/ 29 июля 2018

Проблема может быть решена путем указания номера порта и использования этого синтаксического анализатора {useNewUrlParser: true}.решение может быть:

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

Это решает мою проблему.

0 голосов
/ 09 июля 2018

Вот как у меня получается, подсказка не отображалась на моей консоли, пока я не обновил npm пару дней назад.

.connect имеет 3 параметра, URI, параметры и ошибку.

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) throw err;
        console.log(`Successfully connected to database.`);
    }
);
0 голосов
/ 09 июля 2018

Ничего не менять, передать только в функцию подключения {useNewUrlParser: true } это будет работать

MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
  if(err){
      console.log(err);
  }
  else {
      console.log('connected to '+ url);
      db.close();
  }
})
0 голосов
/ 05 июля 2018

Проверьте свою версию mongo

mongo --version

Если вы используете версию> = 3.1.0, измените файл подключения mongo на ->

MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })

или файл подключения mongoose на ->

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

В идеале это функция версии 4, но ее поддерживает и версия 3.1.0 и выше.Проверьте MongoDB Github для деталей.

0 голосов
/ 22 мая 2018

Как отмечалось, релиз драйвера 3.1.0-beta4 был "выпущен в дикую природу" немного раньше, судя по всему.Релиз является частью незавершенной работы по поддержке новых функций в предстоящем выпуске MongoDB 4.0 и внесению некоторых других изменений в API.

Одним из таких изменений, вызывающих текущее предупреждение, является параметр useNewUrlParser из-за некоторых изменений вокругкак передача URI соединения на самом деле работает.Подробнее об этом позже.

Пока все не "успокоится", вероятно, было бы целесообразно "прикрепить" хотя бы к младшей версии для 3.0.x выпусков:

  "dependencies": {
    "mongodb": "~3.0.8"
  }

Это должно остановить установку ветки 3.1.x на «свежих» установках для узловых модулей.Если вы уже установили «последний» выпуск, который является «бета-версией», то вам следует очистить свои пакеты (и package-lock.json) и убедиться, что вы вернулись к выпуску 3.0.x series.

Что касается фактического использования «новых» параметров URI соединения, основное ограничение заключается в том, чтобы фактически включить port в строку соединения:

const { MongoClient } = require("mongodb");
const uri = 'mongodb://localhost:27017';  // mongodb://localhost - will fail

(async function() {
  try {

    const client = await MongoClient.connect(uri,{ useNewUrlParser: true });
    // ... anything

    client.close();
  } catch(e) {
    console.error(e)
  }

})()

Это более «строгое» правило в новом коде,Суть в том, что текущий код по сути является частью кода репозитория «node-native-driver» (npm mongodb), а «новый код» фактически импортируется из mongodb-core библиотека, которая «поддерживает» драйвер «публичного» узла.

Смысл добавляемой «опции» состоит в том, чтобы «облегчить» переход, добавив опцию в новый код, чтобы новый парсер (фактически основанный на url), используется в коде, добавляющем опцию и очищающем предупреждение об устаревании, и, следовательно, проверяющем, что переданные строки подключения фактически соответствуют тому, что ожидает новый синтаксический анализатор.

В будущих выпусках «устаревший» парсер будет удален, и тогда новый парсер будет просто тем, что используется даже без опции.Но к тому времени ожидается, что весь существующий код будет иметь достаточно возможностей для проверки существующих строк подключения на соответствие ожиданиям нового синтаксического анализатора.

Так что, если вы хотите начать использовать новые функции драйвера по мере их выпуска,затем используйте доступные beta и последующие выпуски и в идеале убедитесь, что вы предоставляете строку подключения, которая действительна для нового анализатора, включив параметр useNewUrlParser в MongoClient.connect().

Если вы этого не сделаетена самом деле нужен доступ к функциям, связанным с предварительным просмотром выпуска MongoDB 4.0, а затем прикрепите версию к серии 3.0.x, как отмечалось ранее.Это будет работать так, как задокументировано, и «закрепление» гарантирует, что 3.1.x выпуски не будут «обновлены» в зависимости от ожидаемой зависимости, пока вы действительно не захотите установить стабильную версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...