Bazı MongoDB örnekleriyle bağlantı kuran bir veritabanı sarmalayıcı sınıfım var:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
Bu bana bir uyarı verdi:
(node:4833) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. Yeni ayrıştırıcıyı kullanmak için MongoClient.connect'e { useNewUrlParser: true } seçeneğini aktarın.
connect()yöntemi ikinci argüman olarak bir
MongoClientOptionsörneğini kabul eder. Ancak
useNewUrlParseradında bir özelliğe sahip değildir. Ayrıca bu özelliği bağlantı dizesinde şu şekilde ayarlamaya çalıştım:
mongodb://127.0.0.1/my-db?useNewUrlParser=true` ancak bu uyarı üzerinde hiçbir etkisi yok.
Peki bu uyarıları kaldırmak için useNewUrlParser
ı nasıl ayarlayabilirim? Bu benim için önemli çünkü betiğin cron olarak çalışması gerekiyor ve bu uyarılar çöp posta spam'ına neden oluyor.
3.1.0-beta4 sürümünde mongodb
sürücüsünü ve 3.0.18
sürümünde karşılık gelen @types/mongodb
paketini kullanıyorum. Her ikisi de npm install
kullanılarak kullanılabilen en son sürümlerdir.
Mongodb sürücüsünün eski bir sürümü kullanılıyor:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
Mongo sürümünüzü kontrol edin
mongo --version
Eğer >= 3.1.0 sürümünü kullanıyorsanız mongo bağlantı dosyanızı -> olarak değiştirin;
MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })
veya mongoose bağlantı dosyanızı -> olarak değiştirin;
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'e göz atın.
Belirtildiği gibi sürücünün 3.1.0-beta4
sürümü "vahşi doğada serbest bırakıldı" görünüşe göre biraz erken. Bu sürüm, MongoDB 4.0 sürümündeki 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.
Mevcut uyarıyı tetikleyen bu tür bir değişiklik, bağlantı URI'sinin gerçekte nasıl çalıştığına dair bazı değişiklikler nedeniyle useNewUrlParser
seçeneğidir. Bu konuda daha sonra bilgi vereceğiz.
İşler "yoluna girene" kadar, muhtemelen "pin"]1 en azından 3.0.x
sürümleri için minör sürüme [tavsiye edilir]:
"dependencies": {
"mongodb": "~3.0.8"
}
Bu, 3.1.x
dalının "fresh" yüklemelerinde node modüllerine yüklenmesini durdurmalıdır. Eğer zaten "beta" sürümü olan "latest" sürümünü yüklediyseniz, paketlerinizi (ve package-lock.json
) temizlemeli ve bunu 3.0.x
serisi bir sürüme indirdiğinizden emin olmalısınız.
Aslında "new" bağlantı URI seçeneklerini kullanmaya gelince, ana kısıtlama aslında port
u bağ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 kanunda daha "katı" bir kuraldır. Ana nokta, mevcut kodun esasen "node-native-driver" ( npm mongodb
) depo kodunun bir parçası olması ve "yeni kod" aslında "public" node sürücüsünün "temelini" oluşturan mongodb-core
kütüphanesinden ithal edilmesidir.
Eklenen "option" seçeneğinin amacı, yeni koda seçeneği ekleyerek geçişi "kolaylaştırmak" böylece daha yeni ayrıştırıcı ( aslında url
tabanlı) seçeneği ekleyen kodda kullanılıyor ve kullanımdan kaldırma uyarısını temizliyor ve bu nedenle aktarılan bağlantı dizelerinizin gerçekten yeni ayrıştırıcının beklediği ile uyumlu olduğunu doğruluyor.
Gelecek sürümlerde 'legacy' ayrıştırıcı kaldırılacak ve yeni ayrıştırıcı, seçenek olmasa 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 beklediklerine karşı test etmek için yeterli fırsata sahip olması beklenmektedir.
Bu nedenle, yeni sürücü özelliklerini yayınlandıkça kullanmaya başlamak istiyorsanız, mevcut beta
ve sonraki sürümleri kullanın ve ideal olarak MongoClient.connect()
içindeki useNewUrlParser
seçeneğini etkinleştirerek yeni ayrıştırıcı için geçerli bir bağlantı dizesi sağladığınızdan emin olun.
MongoDB 4.0 sürümünün önizlemesiyle ilgili özelliklere gerçekten erişmeniz gerekmiyorsa, sürümü daha önce belirtildiği gibi bir 3.0.x
serisine sabitleyin. Bu, belgelendiği gibi çalışacaktır ve "pinning" bu, 3.1.x
sürümlerinin, siz gerçekten kararlı bir sürüm yüklemek isteyene kadar beklenen bağımlılık üzerinden "güncellenmemesini" sağlar.
Değiştirilecek bir şey yok, sadece connect işlevinde {useNewUrlParser: true }
bu çalışacaktır
MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
if(err){
console.log(err);
}
else {
console.log('connected to '+ url);
db.close();
}
})