MongoDB कनेक्शन त्रुटि: MongoTimeoutError: सर्वर चयन 30000 एमएस के बाद समाप्त हो गया


11

मैं निम्नलिखित ट्यूटोरियल पढ़ने के लिए एक फुलस्टैक ऐप बनाने की कोशिश कर रहा हूं:

https://medium.com/javascript-in-plain-english/full-stack-mongodb-react-node-js-express-js-in-one-simple-app-6cc8ed6de274

मैंने सभी चरणों का पालन किया और फिर चलाने की कोशिश की:

node server.js

लेकिन मुझे निम्नलिखित त्रुटि मिली:

MongoDB कनेक्शन त्रुटि: MongoTimeoutError: सर्वर का चयन टाइमआउट में 30000 एमएस के बाद समय समाप्त हो गया ।_onTimeout (C: \ RND \ fullstack_app \ backend \ नोड_modules \ mongodn \ lib \ core \ sdam \ server_selection.js: 308: 9) सूची-आधारित आंतरिक पर। timers.js: 531: 17) प्रोसेसटीमर्स (आंतरिक / timers.js: 475: 7) {name: 'MongoTimeoutError', कारण: त्रुटि: कनेक्ट ETIMEDOUT 99.80.11.208/27017 पर TCPConnectWrap.afterConnect [ascomplete] (नेट)। js: 1128: 14) {नाम: 'MongoNetworkError', [सिंबल (mongoErrorContextSymbol)]: {}}, [सिंबल (mongoErrorContextSymbol)]: {}} (नोड: 42892) UnhandledPromiseReReReReReReVar एग्ज़ेक्टर Timeout._onTimeout (C: \ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js: 308:9) सूचीऑनआउटआउट (आंतरिक / टाइमर्स.जेएस: 531: 17) पर प्रोसेसटीमर्स (आंतरिक / टाइमर्स.जेएस: 475: 7)

Server.js पर मेरा कोड इस प्रकार है:

const mongoose = require('mongoose');
const router = express.Router();

// this is our MongoDB database
const dbRoute =
    'mongodb+srv://user:<password>@cluster0-3zrv8.mongodb.net/test?retryWrites=true&w=majority';

mongoose.Promise = global.Promise;

// connects our back end code with the database
mongoose.connect(dbRoute, 
    {   useNewUrlParser: true,
        useUnifiedTopology: true
    });

let db = mongoose.connection;

db.once('open', () => console.log('connected to the database'));

कोई सुझाव?


1
क्या आपने कनेक्शन स्ट्रिंग में user:passwordअपने को बदल दिया है username and password?
शिवम सूद

@ शिवम सूद हां, मैंने किया
अरविन्द क्रमर

जानकारी में जोड़ने के लिए, मैंने MongoDB कम्पास समुदाय का उपयोग करके कनेक्ट करने का प्रयास किया, लेकिन इसने वही त्रुटि दी। क्या यह कुछ सेटिंग्स पर हो सकता है?
अरविंद करमार

2
आवेदन स्थानीय MongoDB "मोंगोडब: //127.0.0.1/FullStack" के साथ अच्छी तरह से चल रहा है। एटलस MongoDB के लिए संपर्क की समस्या है।
अरविन्द क्रमर

1
मैं इसे हल करने में सक्षम हूं। फ़ायरवॉल पहुंच को रोक रहा था, इसे इसके साथ परीक्षण किया जा सकता था: portquiz.net:27017
अरविंद क्रमार

जवाबों:


25

बस सुरक्षा टैब> नेटवर्क एक्सेस> में mongodb एटलस व्यवस्थापक पैनल पर जाएं> फिर इसे जोड़कर अपने आईपी को सफ़ेद करें

विशेष मेनू का पता लगाने के लिए इस छवि को देखें

नोट: Google पर अपना IP जांचें और फिर उसे जोड़ें


2
ऐसा किया, लेकिन कोई भाग्य नहीं। बल्कि मैंने सभी IP की अनुमति दी, फिर भी काम नहीं किया
अरविंद क्रमार

भाई, क्या आपने DB कॉन्फ़िगरेशन ठीक से सेट किया है
कुणाल usapkar

मैंने db एक्सेस के लिए भूमिकाएँ बनाई हैं: उपयोगकर्ता नाम: arvind प्रमाणीकरण विधि: SCRAM MongoDBRoles: atlasAdmin @ admin क्या मुझे क्लस्टर या 'डेटा लेक' में कुछ बनाने की आवश्यकता है?
अरविंद करमार

इसे हल करने में सक्षम, सबकुछ सही था, लेकिन फ़ायरवॉल पोर्ट को एक्सेस करने के लिए रोक रहा था 27017 उसी का परीक्षण यहां किया जा सकता है: portquiz.net:27017
अरविंद क्रमर

ठीक है महान खुश कोडिंग
कुणाल usapkar

6

सुनिश्चित करें कि उपयोगकर्ता और पासवर्ड फ़ील्ड को बदलने पर "<" और ">" हटा दिए जाते हैं। इसने मेरे लिए काम किया


3

कभी-कभी यह त्रुटि हमारे डेटाबेस के लिए दिए गए आईपी पते के कारण होती है।

ध्यान रहे, आपका एप्लिकेशन अच्छी तरह से काम कर सकता है और फिर ऐसी त्रुटि के साथ आ सकता है। कभी भी ऐसा होता है, ज्यादातर बार आपके आईपी पते बदल गए हैं, जो अनुमति दिए गए पते के श्वेतसूची पर नहीं है।

आपको बस इतना करना है कि अपने वर्तमान आईपी पते के साथ श्वेतसूची को अपडेट करें


2

श्वेतसूची में अपना कनेक्शन आईपी पता। एटलस केवल परियोजना के श्वेतसूची में प्रविष्टियों से क्लस्टर के लिए क्लाइंट कनेक्शन की अनुमति देता है। प्रोजेक्ट श्वेतसूची API श्वेतसूची से अलग है, जो विशिष्ट IP या CIDR पते तक API की पहुँच को प्रतिबंधित करता है।

ध्यान दें

यदि आप एटलस सेटअप कनेक्शन सुरक्षा चरण में इंगित करते हैं कि आपने पहले ही अपने क्लस्टर में एक श्वेत सूची में कॉन्फ़िगर किया है, तो आप इस चरण को छोड़ सकते हैं। IP श्वेतसूची प्रबंधित करने के लिए, श्वेतसूची में प्रविष्टि जोड़ें देखें।

यदि श्वेतसूची खाली है, तो एटलस आपको परियोजना के श्वेतसूची में आईपी पता जोड़ने के लिए प्रेरित करता है। आप या तो यह कर सकते हैं:

अपने वर्तमान आईपी पते को श्वेत सूची में जोड़ने के लिए अपना वर्तमान आईपी पता जोड़ें पर क्लिक करें।

एक एकल IP पता या CIDR-notated श्रेणी के पते जोड़ने के लिए एक अलग IP पता जोड़ें पर क्लिक करें।

अमेज़न वेब सर्विसेज (AWS) पर तैनात एटलस क्लस्टर और VPC Peering का उपयोग करने के लिए, आप सहकर्मी VPC से संबद्ध सुरक्षा समूह जोड़ सकते हैं।

आप नए जोड़े गए IP पते या CIDR श्रेणी के लिए एक वैकल्पिक विवरण प्रदान कर सकते हैं। श्वेतसूची में पता जोड़ने के लिए IP पता जोड़ें पर क्लिक करें।


1

आप {useUnifiedTopology: true} फ़्लैग को हटा सकते हैं और मैंगोज़ निर्भरता को फिर से स्थापित कर सकते हैं! यह मेरे लिए काम किया।


यह निम्न त्रुटि देता है जब {useUnifiedTopology: true} हटा दिया गया: (नोड: 10020) DeprecationWarning: वर्तमान सर्वर डिस्कवरी और मॉनिटरिंग इंजन पदावनत है, और भविष्य के संस्करण में हटा दिया जाएगा। नए सर्वर डिस्कवर और मॉनिटरिंग इंजन का उपयोग करने के लिए, MongoClient कंस्ट्रक्टर के लिए {useUnifiedTopology: true} विकल्प चुनें।
अरविंद करमार

1

मुझे भी यही त्रुटि मिली। ये वो कदम हैं, जिनके लिए मैंने इसे हल किया

  1. सुरक्षा टैब पर जाएं -> नेटवर्क एक्सेस -> फिर अपना आईपी श्वेतसूची में
  2. फिर सुरक्षा टैब पर जाएं -> डेटाबेस एक्सेस -> और अपने वर्तमान उपयोगकर्ता को हटा दें।
  3. नया उपयोगकर्ता नाम और पासवर्ड प्रदान करके एक नया उपयोगकर्ता बनाएँ।
  4. .Env फ़ाइल या mongoose.connect विधि में उस नए बनाए गए उपयोगकर्ता नाम और पासवर्ड को प्रदान करें

इन चरणों के बाद इसने हमेशा की तरह काम किया। आशा है कि यह आप लोगों की मदद करेगा।


0

तुम कोशिश कर सकते हो:

// Import express
let express = require('express');
// Import Body parser
let bodyParser = require('body-parser');
// Import Mongoose
let mongoose = require('mongoose');
// Initialize the app
let app = express();

// Import routes
let apiRoutes = require("./api-routes");
// Configure bodyparser to handle post requests
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

// Connect to Mongoose and set connection variable
mongoose.connect('mongodb://XXXX:XXXX@cluster0-shard-00-00-ov74c.mongodb.net:27017,cluster0-shard-00-01-ov74c.mongodb.net:27017,cluster0-shard-00-02-ov74c.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority', {useNewUrlParser: true})
    .then(()=>console.log("DB server connect"))
    .catch(e => console.log("DB error", e));


var db = mongoose.connection;

// Added check for DB connection

if(!db)
    console.log("Error connecting db")
else
    console.log("Db connected successfully")

// Setup server port
var port = process.env.PORT || 8080;

// Send message for default URL
app.get('/', (req, res) => res.send('Hello World with Express'));

// Use Api routes in the App
app.use('/api', apiRoutes);
// Launch app to listen to specified port
app.listen(port, function () {
    console.log("Running RestHub on port " + port);
});

@ArvindKrmar यदि आप वेबसाइट mongo में लॉग इन हैं? आपने संस्करण चुना node 3.00 or laterऔर `mongodb + srv: // उपयोगकर्ता: <पासवर्ड> @ क्लस्टर0-3zrv8.mongodb.net / परीक्षण की प्रतिलिपि बनाई? RetryWrites = true & w = बहुमत ''? आपके पास चुनने के लिए तीन विकल्प हैं, मध्य नोड चुनें
Umbro

मैंने "अपना एप्लिकेशन कनेक्ट करें" नोड का चयन किया और पासवर्ड को प्रतिस्थापित करते हुए उपरोक्त कनेक्शन स्ट्रिंग की प्रतिलिपि बनाई, हालांकि मुझे यकीन नहीं है कि यह कैसा पासवर्ड होना चाहिए, जिस पासवर्ड से मैंने कम से कम मोंगोडीबी में लॉग इन किया या कुछ और? मैं यह पता लगाने की कोशिश कर रहा हूं
अरविंद क्रमर

@ArvindKrmar आपने एक अलग डेटाबेस पासवर्ड प्रदान किया
Umbro

मैंने "डेटाबेस एक्सेस" अनुभाग में दो उपयोगकर्ता बनाए और उसी पासवर्ड को रखा, जैसे मैं इसे सुरक्षित रखने के लिए mongoDB में लॉगिन करता था या एप्लिकेशन को चालू करना शुरू करता था, लेकिन अब तक भाग्य नहीं।
अरविन्द क्रमर

1
जब मैं लोकलहोस्ट "mongodb: //127.0.0.1/FullStack" का उपयोग करता हूं तो कोड काम कर रहा होता है। तो निश्चित रूप से एटलस MongoDB के लिए कनेक्टिविटी में कुछ समस्या है।
अरविन्द क्रमर

0

मुझे यह समस्या थी, यदि मेरे आईपी को सही ढंग से कॉन्फ़िगर किया जाए और इस स्क्रीन में पुष्टि करने से पहले मेरे पास समाधान था

यहां छवि विवरण दर्ज करें


1
मुझे इसका हल मिल गया। समस्या मेरे नेटवर्क सिस्टम में फ़ायरवॉल सेटिंग्स में थी। portquiz.net:27017 का उपयोग यह जांचने के लिए किया जा सकता है कि क्या कनेक्शन है। हालाँकि मैंने फ़ायरवॉल को नहीं बदला है, क्योंकि यह नेटवर्क व्यवस्थापक द्वारा मेरे अंत में प्रबंधित किया जाता है, लेकिन एक बार फ़ायरवॉल ने अपना काम ठीक कर लिया। सुझाव के लिए सभी को धन्यवाद।
अरविंद करमार

0

कृपया अपना पासवर्ड, उपयोगकर्ता नाम या आईपी कॉन्फ़िगरेशन जांचें । अधिकतर "सर्वर का चयन टाइमआउट पर 30000 एमएस के बाद समय के साथ बाहर हो जाता है। जब भी आपकी उपरोक्त चीजें आपके सर्वर कॉन्फ़िगरेशन से मेल नहीं खाती हैं।"


यह मेरे अंत में एक फ़ायरवॉल मुद्दा था। मैंने इसे ठीक कर दिया और अब इसका काम कर रहा हूं
अरविंद क्रमर

0

मैं मुद्दे को हल करने में सक्षम हूं। सबकुछ ठीक था, लेकिन फ़ायरवॉल 27017 पोर्ट तक पहुंच को रोक रहा था। कनेक्टिविटी को http://portquiz.net:27017/ पर परीक्षण किया जा सकता है या टेलनेट का उपयोग उस समापन बिंदु पर किया जा सकता है जिसे क्लस्टर्स-> मेट्रिक्स से पुनर्प्राप्त किया जा सकता है।

धन्यवाद, सुझावों के लिए हर कोई


0

डेटाबेस प्रमाणीकरण में नए उपयोगकर्ता को डिफ़ॉल्ट प्रमाणीकरण विधि के साथ बनाने की कोशिश करें जो "SCRAM" है। फिर उसके लिए एक नया क्लस्टर बनाएं। यह मेरे लिए काम किया! My server.js फ़ाइल

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());

//const uri = process.env.ATLAS_URI;
mongoose.createConnection("mongodb+srv://u1:u1@cluster0-u3zl8.mongodb.net/test", { userNewParser: true, useCreateIndex: true,  useUnifiedTopology: true}
    );

const connection = mongoose.connection;
connection.once('once', () => {
    console.log(`MongoDB databse connection established successfully`);
})

app.listen(port, () => {
    console.log(`Server is running on port: ${port}`);
});

0

आपका आम संस्करण क्या है? क्योंकि वहाँ एक निश्चित mongoose संस्करण के साथ एक समस्या है। अधिक जानकारी के लिए कृपया इस लिंक पर जाएँ " https://github.com/Automattic/mongoose/issues/8180 "। वैसे भी, मैं एक ही मुद्दे का सामना कर रहा था, लेकिन एक पुराने संस्करण (5.5.2) का उपयोग करने के बाद, इसने मेरे लिए काम किया। कृपया कोशिश करें और मुझे बताएं कि क्या हुआ।


मैं एक ही मुद्दे में चल रहा था, हालांकि, मैं अक्सर अपने वीपीएन को चालू और बंद करके विकसित करता हूं। अपने वीपीएन को फिर से चालू करके, मैं डीबी से जुड़ने में कामयाब रहा। मुझे उम्मीद है कि यह मुद्दा अस्थायी है, क्योंकि मैं हमेशा अपना वीपीएन नहीं रख सकता।
माइक के

0

यह मूल रूप से npm अपडेट के कारण हो सकता है। मैंने अभी npm v 6.13.7 को अपडेट किया है। और मुझे वह त्रुटि मिलने लगी।

@Matheus के निर्देशों के बाद, मैंने "{useUnifiedTopology: true}" लाइन पर टिप्पणी की और मैं इसके माध्यम से प्राप्त करने में सक्षम था।

मैंने मानगो अपडेट किया और सब कुछ ठीक काम करता है।


0

क्या आप किसी भी एंटीवायरस, फ़ायरवॉल, वीपीएन या प्रतिबंधित नेटवर्क (जैसे काम / वाणिज्यिक वाई-फाई / लैन कनेक्शन) का उपयोग कर रहे हैं? फिर इसे बंद करने का प्रयास करें / अलग नेटवर्क से फिर से कनेक्ट करें। कुछ IP / कनेक्शन एक नेटवर्क के व्यवस्थापक द्वारा अवरुद्ध किए जा सकते हैं जो आप उपयोग कर रहे हैं या बस एंटीवायरस में फ़ायरवॉल नीतियां हो सकती हैं। भले ही आप MongoDB एटलस 0.0.0.0में अपने IP Addressमें है।


0

मेरी भी यही समस्या थी। मैं MongoDB कंपास या मेरे नोड ऐप से कनेक्ट कर सकता था कनेक्शन एटलस ने मुझे दिया था। मैंने एटलस में व्हिटेलिस्ट में अपना आईपी पता जोड़कर इसे हल किया।


0

अभी भी इस मुद्दे से जूझ रहे किसी के लिए। मैंने इस मुद्दे को उपयोगकर्ता नाम, पासवर्ड और dbName जैसे सभी मापदंडों को mongoose विकल्पों में सेट करके हल किया।

पहले कोड इस तरह था। (जब मुझे त्रुटि मिल रही थी)।

import mongoose from "mongoose";
mongoose.Promise = require("bluebird");

let dbName = process.env.DB_NAME;
const dbAddress = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
if(!dbName || !dbAddress || !dbPort){
    throw new Error("Mongo error unable to configuredatabase");
}

let options = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    user:process.env.DB_USER,
    pass: process.env.DB_PASS
};

mongoose.connect(`mongodb://${dbAddress}:${dbPort}/${dbName}`, options).catch(err => {
    if (err.message.indexOf("ECONNREFUSED") !== -1) {
        console.error("Error: The server was not able to reach MongoDB. Maybe it's not running?");
        process.exit(1);
    } else {
        throw err;
    }
});

ध्यान दें कि मोंगो कनेक्ट में url। mongodb://${dbAddress}:${dbPort}/${dbName}

त्रुटि के बिना नया कोड।

import mongoose from "mongoose";
mongoose.Promise = require("bluebird");

let dbName = process.env.DB_NAME;
const dbAddress = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
// console.log("process.env", process.env)
if(!dbName || !dbAddress || !dbPort){
    throw new Error("Mongo error unable to configuredatabase");
}

let options = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    user:process.env.DB_USER,
    pass: process.env.DB_PASS,
    dbName: dbName
};

mongoose.connect(`mongodb://${dbAddress}:${dbPort}`, options).catch(err => {
    if (err.message.indexOf("ECONNREFUSED") !== -1) {
        console.error("Error: The server was not able to reach MongoDB. Maybe it's not running?");
        process.exit(1);
    } else {
        throw err;
    }
});

विकल्पों और यूआरएल पर ध्यान दें।

यह मेरा स्थानीय एनवी है। उत्पादन env नहीं।

आशा है कि यह मददगार होगा।


0

नोड ड्राइवर को निर्दिष्ट करने का प्रयास करें, क्लस्टर में संस्करण 2,2,12 -> कनेक्ट -> अपने आवेदन को कनेक्ट करें। नई स्ट्रिंग मोंडोड के साथ होनी चाहिए: //। कनेक्ट करने के लिए इस स्ट्रिंग का उपयोग करें। एक पासवर्ड दर्ज करने के लिए मत भूलना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.