MongoDB bağlantı hatası: MongoTimeoutError: 30000 ms sonra sunucu seçimi zaman aşımına uğradı


11

Aşağıdaki öğreticiyi okuyarak bir fullstack uygulaması oluşturmaya çalışıyorum:

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

Tüm adımları izledim ve sonra çalıştırmayı denedim:

node server.js

Ama şu hatayı aldım:

MongoDB bağlantı hatası: MongoTimeoutError: Timeout._onTimeout'ta 30000 ms sonra sunucu seçimi zaman aşımına uğradı (C: \ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js: 308: 9) listOnTimeout'ta (dahili / timers.js: 531: 17) processTimers'de (internal / timers.js: 475: 7) {name: 'MongoTimeoutError', nedeni: Hata: ETIMEDOUT 99.80.11.208:27017 adresini TCPConnectWrap.afterConnect [oncomplete] olarak bağlayın (net. js: 1128: 14) {name: 'MongoNetworkError', [Symbol (mongoErrorContextSymbol)]: {}}, [Symbol (mongoErrorContextSymbol)]: {}} (düğüm: 42892) UnhandledPromiseRejectionWarning: MongoTimeoutError: 300 seçiminden sonra ms0 Timeout._onTimeout'ta (C: \ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js: 308:9) listOnTimeout'ta (internal / timers.js: 531: 17) processTimers'de (internal / timers.js: 475: 7)

Server.js adresindeki kodum aşağıdaki gibidir:

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

Herhangi bir öneri?


1
Eğer değişti mi user:passwordsizin için username and passwordbağlantı dizesi?
Shivam Sood

Evet, yaptım
Arvind Krmar

Bilgiye eklemek için, MongoDB pusula topluluğunu kullanarak bağlanmaya çalıştım ama aynı hatayı verdi. AtLas Mongodb'daki bazı ayarlar olabilir mi?
Arvind Krmar

2
Uygulama yerel MongoDB "mongodb: //127.0.0.1/FullStack" ile iyi çalışıyor. Atlas MongoDB ile bağlantı sorunu ortaya çıkıyor.
Arvind Krmar

1
Çözebiliyorum. Güvenlik duvarı erişimi engelliyordu, aynı şey bununla test edilebilir: portquiz.net:27017
Arvind Krmar

Yanıtlar:


25

güvenlik sekmesi> Ağ Erişimi> IP'nizi ekleyerek beyaz listeye ekleyin

Belirli menüyü bulmak için bu resme bakın

Not: Google'da IP'nizi kontrol edin ve ekleyin


2
Bunu yaptı, ama şans yok. Aksine, tüm IP'lere izin verdim, hala işe yaramadı
Arvind Krmar

kardeşim, DB yapılandırmasını doğru
kurdunuz mu

Ben db erişim için rol oluşturduk: kullanıcı adı: arvind Kimlik doğrulama yöntemi: SCRAM MongoDBRoles: atlasAdmin @ admin Küme veya 'Data Lake' bir şey oluşturmak gerekir?
Arvind Krmar

çözmek mümkün, her şey doğruydu, ancak güvenlik duvarı 27017 bağlantı noktasına erişimi engelliyordu aynı test burada: portquiz.net:27017
Arvind Krmar

okay great happy coding
kunal usapkar

6

Kullanıcı ve şifre alanlarını değiştirdiğinizde "<" ve ">" öğelerinin kaldırıldığından emin olun. Bu benim için çalıştı


3

Bazen bu hata, veritabanımıza erişim verilen IP Adresi nedeniyle oluşur.

Dikkat edin, uygulamanız iyi çalışıyor olabilir, sonra böyle bir hata ortaya çıkabilir. Bu gerçekleştiğinde, çoğu zaman IP adresleriniz değişti, bu da izin verilen adresin beyaz listesinde değil.

Tek yapmanız gereken, beyaz listeyi mevcut IP adreslerinizle güncellemek


2

Bağlantı IP adresinizi beyaz listeye ekleyin. Atlas, kümeye yalnızca projenin beyaz listesindeki girişlerden istemci bağlantılarına izin verir. Proje beyaz listesi, belirli IP veya CIDR adreslerine API erişimini kısıtlayan API beyaz listesinden farklıdır.

NOT

Atlas, Setup Connection Security adımında kümenizde önceden bir beyaz liste girişi yapılandırdığınızı belirtiyorsa bu adımı atlayabilirsiniz. IP beyaz listesini yönetmek için, bkz. Beyaz Listeye Giriş Ekleme.

Beyaz liste boşsa Atlas, projenin beyaz listesine bir IP adresi eklemenizi ister. Şunlardan birini yapabilirsiniz:

Mevcut IP adresinizi beyaz listeye eklemek için Mevcut IP Adresinizi Ekle'yi tıklayın.

Tek bir IP adresi veya CIDR ile not edilmiş bir adres aralığı eklemek için Farklı Bir IP Adresi Ekle'yi tıklayın.

Amazon Web Services (AWS) üzerine dağıtılan ve VPC Peering kullanan Atlas kümeleri için, eş VPC ile ilişkili bir Güvenlik Grubu ekleyebilirsiniz.

Yeni eklenen IP adresi veya CIDR aralığı için isteğe bağlı bir açıklama sağlayabilirsiniz. Adresi beyaz listeye eklemek için IP Adresi Ekle'yi tıklayın.


1

Şunları yapabilirsiniz kaldırmak {useUnifiedTopology: true} bayrağı ve yeniden yükleme firavun faresi Bağımlılığı! benim için çalıştı.


{useUnifiedTopology: true} kaldırıldığında aşağıdaki hatayı verir: (düğüm: 10020) Kullanım Dışı Uyarı: geçerli Sunucu Bulma ve İzleme altyapısı kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Yeni Sunucu Keşfetme ve İzleme motorunu kullanmak için {useUnifiedTopology: true} seçeneğini MongoClient yapıcısına iletin.
Arvind Krmar

1

Aynı hatayı aldım. Bu sorunu çözmek için izlediğim adımlar

  1. Git güvenlik sekmesi -> Ağ Erişim -> Sonra beyaz listeye IP
  2. Ardından güvenlik sekmesine gidin -> Veritabanı Erişimi -> ve geçerli kullanıcınızı silin.
  3. Yeni kullanıcı adı ve şifre girerek yeni bir kullanıcı oluşturun.
  4. .Env dosyasında veya mongoose.connect yönteminde yeni oluşturulan kullanıcı adını ve şifreyi girin

Bu adımlardan sonra her zamanki gibi çalıştı. Umarım bu size yardımcı olur.


0

Deneyebilirsin:

// 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 web sitesine giriş yaptıysanız mongo? Sürümü node 3.00 or laterseçtiniz ve `` mongodb + srv: // user: <password> @ cluster0-3zrv8.mongodb.net / test? RetryWrites = true & w = çoğunluk ''? Burada seçim yapabileceğiniz üç seçenek var, orta düğümü seçin
Umbro

"Uygulamanızı bağlayın" düğümünü seçtim ve yukarıdaki bağlantı dizesini kopyaladım, parolayı değiştirdim, ancak hangi parola olması gerektiğine, atlast MongoDB'ye giriş yaptığım parolaya veya başka bir şeye emin değilim?
Öğrenmeye

@ArvindKrmar ayrı bir veritabanı parolası sağladınız
Umbro

"Veritabanı erişimi" bölümünde iki kullanıcı oluşturdum ve uğruna güvende tutmak veya uygulamanın çalışmaya başlamasına izin vermek için mongoDB'de oturum açmak için kullandığım şifreyi sakladım, ancak şimdiye kadar şanslı değilim.
Arvind Krmar

1
Ben localhost "mongodb: //127.0.0.1/FullStack" kullandığımda kod çalışıyor. Kesinlikle atlas MongoDB ile bağlantı bazı sorun vardır.
Arvind Krmar

0

Ben bu sorunu vardı, bana çözüm benim ip doğru yapılandırılmış olup olmadığını kontrol oldu ve önce bu ekranda onaylamak

resim açıklamasını buraya girin


1
Çözümü buldum. Sorun ağ sistemimdeki güvenlik duvarı ayarlarındaydı. portquiz.net:27017 bağlantının olup olmadığını test etmek için kullanılabilir. Her ne kadar sonunda ağ yöneticileri tarafından yönetilen güvenlik duvarını değiştirmedim, ancak bir kez güvenlik duvarı şimdi çalışmasını düzeltti. Önerileriniz için herkese teşekkürler.
Arvind Krmar

0

Lütfen Şifrenizi, Kullanıcı Adınızı VEYA IP yapılandırmanızı kontrol edin . Çoğunlukla, yukarıdaki şeyleriniz sunucu yapılandırmanızla eşleşmediğinde "Sunucu seçimi Timeout._onTimeout'ta 30000 ms sonra zaman aşımına uğradı" gelir.


Sonunda bir güvenlik duvarı sorunuydu.
Düzelttim

0

Sorunu çözebiliyorum. Her şey yolundaydı, ancak güvenlik duvarı 27017 numaralı bağlantı noktasına erişimi engelliyordu. Bağlantı http://portquiz.net:27017/ adresinde veya kümeler- > Metriklerden alınabilen uç noktaya telnet kullanılarak test edilebilir.

Herkese teşekkürler, öneriler için


0

"SCRAM" varsayılan Kimlik Doğrulama Yöntemi ile Veritabanı Erişimi'nde yeni Kullanıcı oluşturmaya çalışın. Sonra bunun için yeni bir Küme oluşturun. Benim için çalıştı! Benim server.js dosya

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

Firavun faresi versiyonun nedir? çünkü belirli bir Firavun faresi sürümünde bir sorun var. Daha fazla bilgi için lütfen bu bağlantıyı ziyaret edin " https://github.com/Automattic/mongoose/issues/8180 ". Her neyse, aynı sorunla karşı karşıya kaldım ama eski bir sürümünü (5.5.2) kullandıktan sonra, benim için çalıştı. Lütfen bir deneyin ve bana ne olduğunu bildirin.


Aynı sorunla karşılaşıyordum, ancak VPN'imin açılıp kapanmasıyla sık sık gelişiyorum. VPN'imi tekrar açarak DB'ye bağlanmayı başardım. Bu sorunun geçici olmasını umuyorum, çünkü VPN'imi her zaman açamıyorum.
Mike K

0

Temelde bir npm güncellemesi olabilir. Az önce npm v 6.13.7 sürümüne geçtim. ve bu hatayı almaya başladım.

@Matheus'un talimatlarını izleyerek, "{useUnifiedTopology: true}" satırını yorumladım ve üstesinden gelebildim.

Firavun faresini güncelledim ve her şey yolunda gidiyor.


0

Herhangi bir Antivirüs, Güvenlik Duvarı, VPN veya kısıtlı ağda (örneğin iş / ticari Wi-Fi / LAN bağlantısı) kullanıyor musunuz? Ardından kapatmayı / farklı bir ağa yeniden bağlanmayı deneyin. Bazı IP'ler / bağlantılar kullandığınız bir ağın yöneticisi tarafından engellenmiş olabilir veya yalnızca virüsten koruma yazılımının güvenlik duvarı ilkeleri olabilir. Hatta varsa gerçi 0.0.0.0Gözlerinde farklı IP AddressMongoDB Atlas.


0

Aynı sorunu yaşadım. Atlas'ın bana verdiği bağlantı dizelerini kullanarak MongoDB Compass veya Düğüm uygulamamdan bağlanabildim. IP Adresimi Atlas'taki Beyaz Listeye ekleyerek çözdüm.


0

Hala bu konuda mücadele eden herkese. Mongoose seçeneklerinde kullanıcı adı, şifre ve dbName gibi tüm parametreleri ayarlayarak bu sorunu çözdüm.

Daha önce kod böyle idi. (Hatayı alırken).

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

Moğoldaki URL'nin bağlandığını unutmayın. mongodb://${dbAddress}:${dbPort}/${dbName}.

Hatasız yeni kod.

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

Seçenekleri ve URL'yi not edin.

Bu benim yerel env. Üretim değil env.

Umarım yardımcı olur.


0

düğüm sürücüsünü belirtmeye çalışın, küme sürümü 2,2,12 -> bağlan -> uygulamanızı bağlayın. yeni dize mongodb: // ile olmalıdır. bağlanmak için bu dizeyi kullanın. şifre girmeyi unutma

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.