У меня есть класс оболочки базы данных, который устанавливает соединение с некоторым экземпляром 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"
Проверьте свою версию манго
mongo --version
Если вы используете версию > = 3.1.0, измените файл соединения mongo на - >
MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })
или ваш файл соединения mongoose в - >
mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });
В идеале это функция версии 4, но v3.1.0 и выше также поддерживают ее. Проверьте MongoDB Github для деталей.
Как отмечалось, выпуск драйвера 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». релиз.
Что касается фактического использования параметров URI «нового» соединения, основное ограничение заключается в фактическом включении «порта» в строку соединения:
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
]4] ,) используется в коде с добавлением опции и очисткой предупреждения об амортизации, и, следовательно, проверка того, что переданные строки соединения действительно соответствуют ожиданиям нового анализатора.
В будущих выпусках будет удален анализатор «наследия», и тогда новый анализатор будет просто тем, что используется даже без опции. Но к тому времени ожидается, что весь существующий код имел широкие возможности для проверки существующих строк соединения на соответствие ожиданиям нового синтаксического анализатора.
Поэтому, если вы хотите начать использовать новые функции драйвера по мере их выпуска, используйте доступные beta
и последующие выпуски и в идеале убедитесь, что вы предоставляете строку подключения, которая действительна для нового анализатора, включив опцию useNewUrlParser
в MongoClient.connect ()
.
Если вам на самом деле не нужен доступ к функциям, связанным с предварительным просмотром релиза MongoDB 4.0, подключите версию к серии 3.0.x
, как отмечалось ранее. Это будет работать как документированное, так и «нажимающее», что гарантирует, что выпуски 3.1.x
не будут «обновляться» по сравнению с ожидаемой зависимостью, пока вы действительно не захотите установить стабильную версию.
Ниже выделенный код для соединения mongoose решил предупреждение для драйвера mongoose
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
Ничего не изменится, передавайте только в функции подключения {useNewUrlParser: true}
, это будет работать
MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
if(err){
console.log(err);
}
else {
console.log('connected to '+ url);
db.close();
}
})
Необходимо добавить {useNewUrlParser: true}
в методе mongoose.connect ().
mongoose.connect('mongodb://localhost:27017/Notification',{ useNewUrlParser: true });
Формат строки соединения должен быть mongodb: // user: password @ host: port / db
например:
MongoClient.connect('mongodb://user:[email protected]:27017/yourDB', { useNewUrlParser: true } )
Я не думаю, что вам нужно добавлять { useNewUrlParser: true}
.
Вам решать, хотите ли вы уже использовать новый анализатор URL. В конце концов предупреждение исчезнет, когда манго переключится на свой новый анализатор URL.
Редактировать: Как указано здесь https://docs.mongodb.com/master/reference/connection-string/ вам не нужно устанавливать номер порта.
Достаточно просто добавить { useNewUrlParser: true}
.
Неправильный демокод ES8 MongoDB inc предоставляет также создает это предупреждение.
MongoDB дает следующий совет, который неверен
Чтобы использовать новый синтаксический анализатор, передайте опцию {useNewUrlParser: true} в MongoClient.connect.
Это приведет к следующей ошибке:
TypeErrror: последний аргумент в пользу
executeOperation
должен быть обратным вызовом
Вместо этого опция должна быть предоставлена new MongoClient
:
Смотрите код ниже:
`javascript const DATABASE_NAME = 'mydatabase', URL =
mongodb: // localhost: 27017 / $ {DATABASE_NAME}`
module.exports = async function () { const client = new MongoClient (URL, {useNewUrlParser: true}) var db = null попробуй { // Обратите внимание, что это разрывается. // fait client.connect ({useNewUrlParser: true}) ждите client.connect () db = client.db (DATABASE_NAME) } поймать (ошибка) { consol.log (err.stack) }
вернуть дб
}
Проблема может быть решена путем указания номера порта и использования этого анализатора {useNewUrlParser: true} . решение может быть:
mongoose.connect("mongodb://localhost:27017/cat_app", { useNewUrlParser: true });
Это решает мою проблему.
Полный пример для expressJS, api calling case и json sending следующий:
...
app.get('/api/myApi', (req, res) => {
MongoClient.connect('mongodb://user:[email protected]: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()
},
)
})
}
**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.");
});
Вот как у меня это есть, подсказка не показывалась на моей консоли, пока я не обновил npm пару дней назад.
.connect имеет 3 params, URI, опции и ошибки.
mongoose.connect(
keys.getDbConnectionString(),
{ useNewUrlParser: true },
err => {
if (err) throw err;
console.log(`Successfully connected to database.`);
}
);
Вам просто нужно установить следующие вещи перед подключением к базе данных, как показано ниже:
const mongoose = require('mongoose');
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);
mongoose.connect('mongodb://localhost/testaroo');
Также,
Replace update() with updateOne(), updateMany(), or replaceOne()
Replace remove() with deleteOne() or deleteMany().
Replace count() with countDocuments(), unless you want to count how many documents are in the whole collection (no filter).
In the latter case, use estimatedDocumentCount().
Я использовал mlab.com в качестве базы данных манго. Я разделил строку соединения на другую папку с именем config и internal keys.js. Я сохранил строку соединения, которая была
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
module.exports = {
mongoURI: "mongodb://username:[email protected]:47267/projectname"
};
& Лт;!- конец фрагмента - >
и код сервера был
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
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} после строки соединения, как я делал выше.
просто поставьте, что вам нужно сделать:
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
mongoose.connect(connectionString,{ useNewUrlParser: true }
//or
MongoClient.connect(connectionString,{ useNewUrlParser: true }
& Лт;!- конец фрагмента - >
Эти строки сделали свое дело и для всех других предупреждений об амортизации:
const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);
Я использую mongoose версии 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);
Продолжай улыбаться, приятель :)
Если имя пользователя
или пароль
имеет символ @
. Тогда используйте как это
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));