UseNewUrlParser öğesini true olarak ayarlayarak "geçerli URL dizesi ayrıştırıcısı kullanımdan kaldırıldı" uyarısından kaçının


239

Bazı MongoDB örneğine bağlantı kuran bir veritabanı sarmalayıcı sınıfı var:

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

Bu bana bir uyarı verdi:

(düğüm: 4833) Kullanım Dışı Uyarı: geçerli URL dize ayrıştırıcısı kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Yeni ayrıştırıcıyı kullanmak için {useNewUrlParser: true} seçeneğini MongoClient.connect'e iletin.

connect()Yöntem, bir kabul eden MongoClientOptionsikinci bağımsız değişken olarak örneği. Ama denilen bir özelliği yok useNewUrlParser. Ayrıca bu özelliği bağlantı dizesinde bu özelliği ayarlamaya çalıştım: mongodb://127.0.0.1/my-db?useNewUrlParser=trueancak bu uyarı üzerinde hiçbir etkisi yoktur.

Bu useNewUrlParseruyarıyı kaldırmak için nasıl ayarlayabilirim ? Komut dosyası cron olarak çalışacağından ve bu uyarılar çöp-posta spam'ına neden olduğu için bu benim için önemlidir.

Ben mongodbsürücü 3.1.0-beta4karşılık gelen @types/mongodbpaket sürümünde kullanıyorum 3.0.18. Her ikisi de son daİremİz kullanaraknpm install .

Geçici çözüm

Mongodb sürücüsünün eski bir sürümünü kullanma:

"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"

5
Bu betahafta sonu npm'de bir şekilde piyasaya sürülen versiyondan geliyor . API gerçekten sonlandırılana kadar endişelenmeyin. Kararlı bir sürüm kurarken doğru şeyi yaptınız.
Neil Lunn

1
mongodb 3.0.0'ın üstünde sadece mongoose.connect ekleyin ("mongodb: // localhost: portnumber / YourDB", {useNewUrlParser: true})
Majedur Rahaman

Yanıtlar:


402

Senin Kontrol mongosürümü:

mongo --version

Sürüm> = 3.1.0 kullanıyorsanız, mongobağlantı dosyanızı -> olarak değiştirin

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

veya mongoose bağlantı dosyanızı ->

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

İdeal olarak, bu bir sürüm 4 özelliğidir, ancak v3.1.0 ve üstü de bunu desteklemektedir. Ayrıntılar için MongoDB GitHub'a göz atın .


1
@AbhishekSinha Neden mongo ile> = 4.0.0? 3.6.5 kullanıyorum ve can sıkıcı mesaj da gitti.
greuze

Yup bunu düzeltti. Temel olarak, bir v4 özelliğidir, ancak v3.1.0 ve üstü yeni özelliği de destekler.
Abhishek Sinha

3
Bu, en iyisi, yalnızca geri arama, hata için esp varsa, şunu kullanın: mongoose.connect (dbUrl, {useNewUrlParser: true}, işlev (err) {console.log ("mongoDB bağlı", err);})
ptts

Teşekkürler, profesyonel gibi düzeltildi
Hidayt Rahman

46

Belirtildiği gibi, 3.1.0-beta4sürücünün serbest bırakılması, şeylerin görünümünden biraz önce "vahşi doğada serbest bırakıldı". Sürüm, MongoDB 4.0'ın gelecek sürümünde daha yeni özellikleri desteklemek ve diğer bazı API değişikliklerini yapmak için devam eden çalışmaların bir parçasıdır.

Geçerli uyarıyı tetikleyen bu tür bir değişiklik useNewUrlParser, bağlantı URI'sinin iletilmesinin gerçekte nasıl çalıştığına dair bazı değişiklikler nedeniyle seçenektir. Daha sonra.

Şeyler "yerleşene" kadar, muhtemelen en azından sürümler için en azından küçük sürüme "sabitlemek" tavsiye edilir3.0.x :

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

Bu, 3.1.xdalın düğüm modüllerine "yeni" kurulumlara yüklenmesini durdurmalıdır . Zaten "beta" sürümü olan bir "en son" sürümü yüklediyseniz, paketlerinizi (ve package-lock.json) temizlemeli ve bunu bir3.0.x seri sürümüne .

Aslında "yeni" bağlantı URI seçeneklerini kullanmaya gelince, ana kısıtlama aslında portbağlantı dizesine dahil etmektir :

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)
  }

})()

Bu yeni kodda daha "katı" bir kural. Ana nokta, şu anki kodun esas olarak "düğüm-yerli-sürücü" (npm mongodb) veri havuzunun bir parçası olması ve "yeni kod" un aslındamongodb-core "genel" düğüm sürücüsünü "destekleyen" kütüphaneden .

Eklenen "seçenek" noktası yeni koda seçenek ekleyerek geçişi kolaylaştırmaktır, böylece daha yeni ayrıştırıcı (aslında url ) seçeneği ekleyerek ve kullanımdan kaldırma uyarısını temizleyerek kodda kullanılır. iletilen bağlantı dizeleriniz aslında yeni ayrıştırıcının beklediğile uyumludur.

Gelecek sürümlerde 'eski' ayrıştırıcı kaldırılacak ve daha sonra yeni ayrıştırıcı, seçenek olmadan bile kullanılan şey olacaktır. Ancak o zamana kadar, mevcut tüm kodların, mevcut bağlantı dizelerini yeni ayrıştırıcının beklediği şeylere karşı test etme fırsatı bulması bekleniyor.

Dolayısıyla, yeni sürücü özelliklerini piyasaya sürüldükçe kullanmaya başlamak istiyorsanız, mevcut betave sonraki sürümleri kullanın ve ideal olarak useNewUrlParserseçeneği etkinleştirerek yeni ayrıştırıcı için geçerli bir bağlantı dizesi sağladığınızdan emin olun .MongoClient.connect() .

MongoDB 4.0 sürümünün önizlemesiyle ilgili özelliklere gerçekten ihtiyacınız yoksa, sürümü 3.0.xdaha önce belirtildiği gibi bir seriye sabitleyin . Bu, belgelenmiş ve "sabitleme" olarak çalışacaktır. Bu, 3.1.xkararlı bir sürüm yüklemek isteyene kadar sürümlerin beklenen bağımlılık üzerinde "güncellenmemesini" sağlar.


1
"Vahşi doğada serbest bırakma" dediğinde ne demek istediğin hakkında daha fazla bilgin var mı? 3.1.0-beta4 hayvanat bahçesinden nasıl kaçtı? Bununla ilgili herhangi bir referans verebilir misiniz?
Wyck

2
@Wyck "Referans", elbette, soru sorulduğu npm install mongodbsırada, "beta" (soruda gösterilen sürüm dizesinde açıkça işaretlenmiş) ile sonuçlandığından stable, npm deposunda olduğu gibi işaretlendiğinden sonuçlandı. olmamalıydı. Bu gerçekten de bir hataydı ve her zaman , dize alphaveya betasürüm dizesi içindeki herhangi bir kod sürümü benzer şekilde kararlı olarak işaretlenmişse dikkate alınmalıdır . Doğal olarak zaman geçti ve bu, (not edildiği gibi) sonunda gidene kadar kararlı sürümlerde bir özellik.
Neil Lunn

45

Firavun faresi bağlantısına aşağıda vurgulanan kod, Firavun faresi sürücüsünün uyarısını çözdü:

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

4
benim için çalışmıyor. hala elde ediliyor: (düğüm: 35556) Kullanım Dışı Uyarı: geçerli URL dize ayrıştırıcısı kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Yeni ayrıştırıcıyı kullanmak için {useNewUrlParser: true} seçeneğini MongoClient.connect'e iletin.
Alex

Hala çalışmazsa DB yolunu verdiğiniz her yerde server.js veya app.js dosyasını kaydetmeniz gerekir. Package.json dosyanız her ne zaman npm install komutunu girerek node_modules'i silerek ve yeniden yüklemeyi deneyin
Narendra Maru

24

Değiştirilecek bir şey yok. Yalnızca bağlantı işlevinde geçin {useNewUrlParser: true }.

Bu çalışacak:

MongoClient.connect(url, {useNewUrlParser: true}, function(err, db) {
    if(err) {
        console.log(err);
    }
    else {
        console.log('connected to ' + url);
        db.close();
    }
})

Sadece ihtiyacım olan şey, ama uyarı mesajı hala orada: -S
alex351

Benim için çalışıyor, artık uyarı yok.
Qiao Qiao

17

{ useNewUrlParser: true }Mongoose.connect () yöntemini eklemeniz gerekir .

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

1
Bu cevap aylar önce gönderilmiş diğer cevaplar ile aynı
Daniel W.

Bu önceki cevaplardan nasıl farklı?
Peter Mortensen

@PeterMortensen lütfen önce cevabı yazan tarihi kontrol edin
KARTHIKEYAN.A

15

Bağlantı dizesi biçimi mongodb: // user: password @ host: port / db olmalıdır

Örneğin:

MongoClient.connect('mongodb://user:password@127.0.0.1:27017/yourDB', { useNewUrlParser: true } )

Hayır MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } ).
Nino Filiu

Bu önceki cevaplardan nasıl farklı?
Peter Mortensen

15

Veritabanına aşağıdaki gibi bağlanmadan önce aşağıdakileri ayarlamanız yeterlidir:

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');

Ayrıca,

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().

3
En iyi cevap olmalı. Benim için diğer tüm cevaplar sefil bir şekilde başarısız oldu.
Anthony

Pls correctsizin için çalıştı sanki ans işaretleyin . Benim için de işe yaradı!
Arpan Banerjee

9

Aşağıdaki işler benim için

const mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/playground", { useNewUrlParser: true,useUnifiedTopology: true })
.then(res => console.log('Connected to db'));

mongooseSürümüdür 5.8.10.


1
Bu da benim için çalıştı. Ben kullanıyorum--body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
Arpan Banerjee

8

Eklemen gerektiğini sanmıyorum { useNewUrlParser: true }.

Yeni URL ayrıştırıcısını zaten kullanmak istiyorsanız size kalmış. Sonunda MongoDB yeni URL ayrıştırıcısına geçtiğinde uyarı kaybolacaktır.

Bağlantı Dizesi URI Biçiminde belirtildiği gibi , bağlantı noktası numarasını ayarlamanız gerekmez.

Sadece eklemek { useNewUrlParser: true }yeterlidir.


1
Bağlantı noktası numarasını ekledim ve hala hata mesajını aldım. Hata mesajını çok kafa karıştırıcı ve yanıltıcı buluyorum: neden eski formatı kullandığımda yeni formatı kullanmamı söyleyen bir mesaj alıyorum ve mükemmel çalışıyor ... !! ??
Nico

2
İyi soru! Bunun bir uyarı olduğunu unutmayın. Hata değil. Sadece ekleyerek useNewUrlParser: trueuyarı kaybolacaktır. Ancak bu ekstra parametre, mongo yeni url ayrıştırıcısına geçtiğinde bu eski parametre geçersiz hale geleceğinden biraz aptalca.
Sam

yeni url ayrıştırıcısının beklediği bağlantı noktası numarasının nasıl olduğunu nasıl bildiniz? Yeni url ayrıştırıcısının gerçekte ne olduğunu açıklayan hiçbir şey bulamıyorum
Brad

@Brad, gerçekten. Bağlantı noktası numarasını eklemeniz gerektiğini varsayıyordum, ancak Moğol teknik özellikleri hala bağlantı noktası numarasından isteğe bağlı olarak bahsediyor. Cevabımı buna göre güncelledim.
Sam

8

ECMAScript 8 / güncelleme için güncellendi

MongoDB inc'nin sağladığı yanlış ECMAScript 8 demo kodu da bu uyarıyı oluşturur.

MongoDB yanlış olan aşağıdaki önerileri sunar

Yeni ayrıştırıcıyı kullanmak için {useNewUrlParser: true} seçeneğini MongoClient.connect'e iletin.

Bunu yapmak aşağıdaki hataya neden olacaktır:

TypeError: son bağımsız değişken executeOperationbir geri arama olmalıdır

Bunun yerine ,new MongoClient :

Aşağıdaki koda bakın:

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
}

7

Bağlantı noktası numarası verilerek ve bu ayrıştırıcı kullanılarak sorun çözülebilir: {useNewUrlParser: true}

Çözüm şu olabilir:

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

Sorunumu çözdü.


3
Konsol kendisi eklemek için çözüm verdi useNewUrlParser propertyiçinde connect, ancak çözüm sağladı. so Olumlu oy!
ganeshdeshmukh

7

Express.js, API çağrı durumu ve JSON içeriği gönderme için tam örnek şöyledir:

...
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()
          },
        )
    })
}

4

İşte böyle. Birkaç gün önce npm'i güncelleyene kadar ipucu konsolumda gösterilmedi.

.connect, URI, seçenekler ve hata olmak üzere üç parametreye sahiptir.

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) 
            throw err;
        console.log(`Successfully connected to database.`);
    }
);

4

Kullanıyorduk:

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

→ Bu bir URL ayrıştırıcı hatası verir

Doğru sözdizimi:

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

1
Biraz açıklama ekle
Mathews Sunny

4

Sadece eklemelisin

{ useNewUrlParser: true }

mongoose.connect yönteminin içinde.


1
Bu önceki cevaplardan nasıl farklı?
Peter Mortensen

karmayı kontrol et.
AGrush

2

5.9.16 sürümü için aşağıdaki iş benim için

const mongoose = require('mongoose');

mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);

mongoose.connect('mongodb://localhost:27017/dbName')
    .then(() => console.log('Connect to MongoDB..'))
    .catch(err => console.error('Could not connect to MongoDB..', err))

1

Bu satırlar diğer tüm kullanımdan çıkarma uyarıları için de hile yaptı:

const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);

1

Mlab.com'u MongoDB veritabanı olarak kullanıyordum. Bağlantı dizesini farklı bir klasöre ayırdımconfig ve dosya keys.js içinde olan bağlantı dizesini tuttum:

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

Ve sunucu kodu

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

Yukarıda yaptığım gibi bağlantı dizesinden sonra {useNewUrlParser: true} yazmanız gerekir.

Basitçe söylemek gerekirse, yapmanız gerekenler:

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


1

Projem için mongoose sürüm 5.x kullanıyorum. Firavun faresi paketini istedikten sonra, değeri global olarak aşağıdaki gibi ayarlayın.

const mongoose = require('mongoose');

// Set the global useNewUrlParser option to turn on useNewUrlParser for every connection by default.
mongoose.set('useNewUrlParser', true);

0

Karakteri varsa usernameveya passwordvarsa, @bunu şu şekilde kullanın:

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));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.