"वर्तमान URL स्ट्रिंग पार्सर से हटा दिया गया है" से बचने के लिए उपयोग करें चेतावनी को सही करने के लिए उपयोग करें


239

मेरे पास एक डेटाबेस आवरण वर्ग है जो कुछ MongoDB उदाहरण के लिए एक कनेक्शन स्थापित करता है:

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

इससे मुझे एक चेतावनी मिली:

(नोड: ४ning३३) DeprecationWarning: वर्तमान URL स्ट्रिंग पार्सर को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए पार्सर का उपयोग करने के लिए, MongoClient.connect को {{NNUUrlParser: true} विकल्प पास करें।

connect()विधि एक को स्वीकार करता है MongoClientOptionsदूसरा तर्क के रूप में उदाहरण। लेकिन इसके पास कोई संपत्ति नहीं है useNewUrlParser। मैंने उन संपत्तियों को इस तरह कनेक्शन स्ट्रिंग में सेट करने की कोशिश की: mongodb://127.0.0.1/my-db?useNewUrlParser=trueलेकिन इसका उन चेतावनी पर कोई प्रभाव नहीं है।

तो मैं useNewUrlParserउन चेतावनी को कैसे हटा सकता हूं ? यह मेरे लिए महत्वपूर्ण है क्योंकि स्क्रिप्ट को क्रोन के रूप में चलना चाहिए और उन चेतावनियों के परिणामस्वरूप कचरा-मेल स्पैम होता है।

मैं इसी पैकेज में mongodbसंस्करण के 3.1.0-beta4साथ ड्राइवर का उपयोग कर रहा हूं । दोनों का उपयोग कर नवीनतम उपलब्ध हैं ।@types/mongodb3.0.18npm install

वैकल्पिक हल

ड्राइवर के पुराने संस्करण का उपयोग करना:

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

5
यह उस betaसंस्करण से आ रहा है जो किसी भी तरह सप्ताहांत में npm पर जारी किया गया था। इसके बारे में चिंता न करें जब तक कि एपीआई वास्तव में अंतिम रूप नहीं ले लेता। आपने एक स्थिर संस्करण स्थापित करने के लिए सही काम किया।
नील लुन

1
मोंगोडब के ऊपर 3.0.0 केवल मोंगोज़ोस जोड़ें। "(" मोंगोडब: // लोकलहोस्ट: पोर्टनंबर / यूआरडीबी ", {उपयोगन्यूप्लारसर: सच्चा})
माजेदुर रहमान

जवाबों:


402

अपना 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 की विशेषता है, लेकिन v3.1.0 और इसके बाद के संस्करण भी इसका समर्थन कर रहे हैं। की जाँच करें MongoDB GitHub जानकारी के लिए।


1
@AbhishekSinha मोंगो के साथ क्यों = = 4.0.0? मैं 3.6.5 का उपयोग कर रहा हूं और कष्टप्रद संदेश भी चला गया है।
greuze

यप ने तय किया कि मूल रूप से, यह एक v4 सुविधा है, लेकिन v3.1.0 और इसके बाद के संस्करण नई सुविधा का समर्थन करता है।
अभिषेक सिन्हा

3
यह सबसे अच्छा है, बस जोड़ना चाहता था, अगर आपके पास एक कॉलबैक है, त्रुटि के लिए esp, बस इस का उपयोग करें: mongoose.connect (dbUrl, {useNewUrlParser: true}, function (इरेट) "कंसोल .log (" mongoDB जुड़ा "), तक);})
पीटीएस

धन्यवाद, प्रो की तरह फिक्स्ड
हिदायत रहमान

46

जैसा कि उल्लेख किया गया 3.1.0-beta4है कि ड्राइवर की रिहाई को "जंगली में जारी किया गया" चीजों की शक्ल से थोड़ी जल्दी मिली। रिलीज, MongoDB 4.0 आगामी रिलीज में नई सुविधाओं का समर्थन करने और कुछ अन्य एपीआई परिवर्तन करने के लिए प्रगति का काम है।

वर्तमान चेतावनी को ट्रिगर करने वाला एक ऐसा परिवर्तन useNewUrlParserविकल्प है, जो यूआरआई वास्तव में काम करता है के आसपास के कुछ परिवर्तनों के कारण होता है। उस पर और बाद में।

जब तक चीजें "बस जाती हैं", यह संभवतः रिलीज के लिए कम से कम मामूली संस्करण में "पिन" करने के लिए उचित होगा 3.0.x:

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

कि 3.1.xनोड मॉड्यूल के लिए "ताजा" प्रतिष्ठानों पर स्थापित की जा रही शाखा को रोकना चाहिए । यदि आपने पहले से ही एक "नवीनतम" रिलीज़ स्थापित किया है जो "बीटा" संस्करण है, तो आपको अपने पैकेज (और package-lock.json) को साफ करना चाहिए और सुनिश्चित करें कि आप एक 3.0.xश्रृंखला रिलीज के लिए नीचे टकराएंगे ।

वास्तव में "नए" कनेक्शन यूआरआई विकल्पों का उपयोग करने के लिए, मुख्य प्रतिबंध वास्तव में 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)
  }

})()

नए कोड में यह अधिक "सख्त" नियम है। मुख्य बिंदु यह है कि वर्तमान कोड अनिवार्य रूप से "नोड-देशी-ड्राइवर" (npm mongodb) रिपॉजिटरी कोड का हिस्सा है, और "नया कोड" वास्तव में mongodb-coreलाइब्रेरी से आयात करता है जो "सार्वजनिक" नोड ड्राइवर को "अंडरपिन" करता है।

जोड़ा जा रहा "विकल्प" का बिंदु नए कोड के विकल्प को जोड़कर संक्रमण को "कम" करना है इसलिए नए पार्सर (वास्तव में चारों ओर आधारित url) का उपयोग कोड को जोड़ने और अपग्रेड चेतावनी को साफ़ करने में किया जा रहा है, और इसलिए इसका सत्यापन किया जा रहा है आपके कनेक्शन स्ट्रिंग्स वास्तव में नए पार्सर की अपेक्षा के अनुरूप हैं।

भविष्य के रिलीज में 'विरासत' पार्सर को हटा दिया जाएगा और फिर नया पार्सर बस वही होगा जो विकल्प के बिना भी उपयोग किया जाता है। लेकिन उस समय तक, यह उम्मीद की जाती है कि सभी मौजूदा कोड के पास नए पार्सर की उम्मीद के खिलाफ अपने मौजूदा कनेक्शन के तार का परीक्षण करने का पर्याप्त अवसर था।

इसलिए यदि आप जारी किए गए नए ड्राइवर सुविधाओं का उपयोग शुरू करना चाहते हैं, तो उपलब्ध betaऔर बाद के रिलीज का उपयोग करें और आदर्श रूप से सुनिश्चित करें कि आप एक कनेक्शन स्ट्रिंग प्रदान कर रहे हैं जो useNewUrlParserविकल्प को सक्षम करके नए पार्सर के लिए मान्य है MongoClient.connect()

यदि आपको वास्तव में MongoDB 4.0 रिलीज के पूर्वावलोकन से संबंधित सुविधाओं तक पहुंच की आवश्यकता नहीं है, तो संस्करण को 3.0.xपहले बताए गए श्रृंखला में पिन करें । यह प्रलेखित और "पिनिंग" के रूप में काम करेगा यह सुनिश्चित करता है3.1.x रिलीज़ अपेक्षित आश्रितता पर "अपडेट" नहीं हैं जब तक आप वास्तव में एक स्थिर संस्करण स्थापित नहीं करना चाहते हैं।


1
क्या आपके पास "जंगली में जारी" कहने पर आपके बारे में अधिक जानकारी है? कैसे 3.1.0-बीटा 4 चिड़ियाघर से बच गए? क्या आप इसके बारे में कोई संदर्भ बता सकते हैं?
व्येक

2
@Yck "संदर्भ" निश्चित रूप से उस समय था जब सवाल पूछा गया था, npm install mongodbजिसके परिणामस्वरूप "बीटा" (स्पष्ट रूप से प्रश्न में दिखाए गए संस्करण स्ट्रिंग में चिह्नित) स्थापित किया जा रहा है क्योंकि इसे stablenpm रिपॉजिटरी के रूप में चिह्नित किया गया था नहीं होना चाहिए था। यह वास्तव में उस समय एक त्रुटि थी और हमेशा इस पर विचार किया जाना चाहिए कि कोई भी कोड रिलीज़ दिखा रहा है alphaया betaसंस्करण स्ट्रिंग के भीतर समान रूप से स्थिर के रूप में चिह्नित है। स्वाभाविक रूप से समय बीत चुका है और यह अब स्थिर रिलीज में एक विशेषता है, जब तक (जैसा कि विख्यात) यह अंततः चले जाएगा।
नील लुन

45

मेनगोज़ कनेक्शन के लिए नीचे हाइलाइट किए गए कोड ने ड्राइवर के लिए चेतावनी को हल किया:

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

4
मेरे लिए काम नहीं कर रहा। अभी भी प्राप्त हो रहा है: (नोड: 35556) पदावनत: वर्तमान URL स्ट्रिंग पार्सर को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए पार्सर का उपयोग करने के लिए, MongoClient.connect को {{NNUUrlParser: true} विकल्प पास करें।
एलेक्स

आप server.js या app.js भी आप डीबी पथ दे रहे हैं, तो अभी भी हटाने और स्थापित NPM जब भी आपके package.json फ़ाइल है दर्ज करके node_modules फिर से स्थापित करने से कोशिश काम नहीं कर बचाने की जरूरत है चाहिए
नरेन्द्र मारू

24

कुछ बदलने वाला नहीं है। कनेक्ट फ़ंक्शन में केवल पास करें {useNewUrlParser: true }

यह काम करेगा:

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

बस मुझे क्या चाहिए, लेकिन चेतावनी संदेश अभी भी है: -S
alex351

मेरे लिए काम करता है, अब कोई चेतावनी नहीं।
प्र। Qiao

17

आपको { useNewUrlParser: true }mongoose.connect () विधि में जोड़ना होगा ।

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

1
यह उत्तर अन्य उत्तरों के समान है जो महीनों पहले पोस्ट किए गए हैं
डैनियल डब्ल्यू।

यह पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

@PeterMortensen कृपया उस पोस्ट की जांच करें, जिसने उत्तर को पहले पोस्ट किया है
KARTHIKEYAN.A

15

कनेक्शन स्ट्रिंग प्रारूप mongodb होना चाहिए : // उपयोगकर्ता: पासवर्ड @ होस्ट: पोर्ट / डीबी

उदाहरण के लिए:

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

नहीं MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )भी काम करता है।
नीनो फीलू

यह पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेनसेन

15

आपको बस नीचे दिए गए डेटाबेस से कनेक्ट करने से पहले निम्नलिखित चीजों को सेट करना होगा:

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

3
शीर्ष उत्तर होना चाहिए। मेरे लिए अन्य सभी उत्तर बुरी तरह से विफल रहे।
एंथनी

Pls एन्स को चिह्नित करें जैसे correctकि यह आपके लिए काम करता है। यह मेरे लिए भी काम किया!
अर्पण बैनर्जी

9

निम्नलिखित मेरे लिए काम करता है

const mongoose = require('mongoose');

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

mongooseसंस्करण है 5.8.10


1
इसने भी मेरे लिए काम किया। मैं उपयोग कर रहा हूँ--body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
अर्पण बैनर्जी

8

मुझे नहीं लगता कि आपको जोड़ने की आवश्यकता है { useNewUrlParser: true }

यदि आप नए URL पार्सर का उपयोग करना चाहते हैं तो यह आपके ऊपर है। आखिरकार चेतावनी तब दूर हो जाएगी जब MongoDB अपने नए URL पार्सर में बदल जाएगा।

कनेक्शन स्ट्रिंग URI प्रारूप में निर्दिष्ट के रूप में , आपको पोर्ट नंबर सेट करने की आवश्यकता नहीं है।

बस जोड़ना { useNewUrlParser: true }काफी है।


1
मैंने पोर्ट नंबर जोड़ दिया है और अभी भी त्रुटि संदेश मिलता है। मुझे त्रुटि संदेश बहुत भ्रामक और भ्रामक लगता है: मुझे नए प्रारूप का उपयोग करने के लिए मुझे एक संदेश क्यों मिला, जब मैं वास्तव में पुराने प्रारूप का उपयोग कर रहा हूं और यह पूरी तरह से काम करता है ... !! ??
निको

2
अच्छा प्रश्न! ध्यान दें कि यह एक चेतावनी है। त्रुटि नहीं। केवल जोड़ने useNewUrlParser: trueसे चेतावनी गायब हो जाएगी। लेकिन यह थोड़ा और बेवकूफी भरा है क्योंकि यह अतिरिक्त पैरामीटर अप्रचलित हो जाएगा क्योंकि एक बार मूंग अपने नए यूआरएल पार्सर में बदल जाएगा।
सैम

आपको कैसे पता चला कि पोर्ट नंबर वह है जो नए url पार्सर को उम्मीद है? मुझे कुछ भी नहीं मिला जो वास्तव में बताता है कि नया यूआरएल पार्सर क्या है
ब्रैड

@ ब्रैड, वास्तव में। मैं आपको पोर्ट नंबर जोड़ने के लिए आवश्यक मान रहा था, लेकिन Mongo चश्मा अभी भी वैकल्पिक होने के रूप में पोर्ट नंबर का उल्लेख करता है। मैंने उसी हिसाब से अपना जवाब अपडेट किया।
सैम

8

ECMAScript 8 / प्रतीक्षारत के लिए अपडेट किया गया

गलत ECMAScript 8 डेमो कोड MongoDB inc प्रदान करता है यह चेतावनी भी बनाता है।

MongoDB निम्नलिखित सलाह प्रदान करता है, जो गलत है

नए पार्सर का उपयोग करने के लिए, MongoClient.connect को {{NNUUrlParser: true} विकल्प पास करें।

ऐसा करने से निम्नलिखित त्रुटि होगी:

TypeError: अंतिम तर्क executeOperationकॉलबैक होना चाहिए

इसके बजाय विकल्प प्रदान किया जाना चाहिए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
}

7

पोर्ट नंबर देकर और इस पार्सर का उपयोग करके समस्या को हल किया जा सकता है: {useNewUrlParser: true}

समाधान हो सकता है:

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

यह मेरी समस्या का समाधान करता है।


3
सांत्वना खुद को जोड़ने के लिए समाधान दिया useNewUrlParser propertyमें connectहै, लेकिन अपने समाधान में मदद की। इसलिए अपवित्र!
गणेशदेशमुख

7

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

4

यहाँ मेरे पास यह कैसे है। संकेत मेरे कंसोल पर तब तक नहीं दिखा, जब तक कि मैंने npm को कुछ दिनों पहले अपडेट नहीं किया था।

.connect के तीन पैरामीटर हैं, URI, विकल्प और इरेट।

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

4

हम उपयोग कर रहे थे:

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

→ यह एक URL पार्सर त्रुटि देता है

सही सिंटैक्स है:

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
कुछ विवरण जोड़ें
मैथ्यू सनी

4

आपको बस जोड़ने की जरूरत है

{ useNewUrlParser: true }

mongoose.connect विधि के अंदर।


1
यह पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

हैश की जाँच करें।
AGrush

2

संस्करण 5.9.16 के लिए मेरे लिए निम्नलिखित कार्य

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

इन पंक्तियों ने अन्य सभी पदावनति चेतावनियों के लिए भी चाल चली:

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

1

मैं MongoDB डेटाबेस के रूप में mlab.com का उपयोग कर रहा था। मैंने कनेक्शन स्ट्रिंग को नाम configऔर फ़ाइल के अंदर एक अलग फ़ोल्डर में अलग किया है ।js मैंने कनेक्शन स्ट्रिंग को रखा जो था:

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

और सर्वर कोड था

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

जैसा कि मैंने ऊपर किया था कनेक्शन स्ट्रिंग के बाद आपको {useNewUrlParser: true} लिखना होगा।

सीधे शब्दों में कहें, आपको करने की आवश्यकता है:

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


1

मैं अपनी परियोजना के लिए 5 संस्करण mongoose का उपयोग कर रहा हूं। मानगो पैकेज की आवश्यकता के बाद, नीचे दिए गए मान को वैश्विक रूप से सेट करें।

const mongoose = require('mongoose');

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

0

यदि चरित्र है 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));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.