Errore di connessione MongoDB: MongoTimeoutError: Timeout selezione server dopo 30000 ms


11

Sto cercando di creare un'app fullstack leggendo il seguente tutorial:

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

Ho seguito tutti i passaggi e poi ho provato a eseguire:

node server.js

Ma ho ricevuto il seguente errore:

Errore di connessione MongoDB: MongoTimeoutError: Timeout della selezione del server dopo 30000 ms a Timeout._onTimeout (C: \ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js: 308: 9) su listOnTimeout (interno / timers.js: 531: 17) at processTimers (internal / timers.js: 475: 7) {nome: 'MongoTimeoutError', motivo: errore: connetti ETIMEDOUT 99.80.11.208:27017 su TCPConnectWrap.afterConnect [come incompleto] (netto. js: 1128: 14) {nome: 'MongoNetworkError', [Symbol (mongoErrorContextSymbol)]: {}}, [Symbol (mongoErrorContextSymbol)]: {}} (nodo: 42892) UnhandledPromiseRejectionWarning: MongoTimeoutError: 300 ms scaduto at Timeout._onTimeout (C: \ RND \ fullstack_app \ backend \ node_modules \ mongodb \ lib \ core \ sdam \ server_selection.js: 308:9) at listOnTimeout (internal / timers.js: 531: 17) at processTimers (internal / timers.js: 475: 7)

Il mio codice su server.js è il seguente:

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

Eventuali suggerimenti?


1
Sei stato modificato user:passwordnella tua username and passwordstringa di connessione?
Shivam Sood,

@ShivamSood Sì, l'ho fatto
Arvind Krmar il

Per aggiungere alle informazioni, ho provato a connettermi usando la community bussola MongoDB ma ha dato lo stesso errore. Possono esserci alcune impostazioni su atLas Mongodb?
Arvind Krmar,

2
l'applicazione funziona correttamente con MongoDB locale "mongodb: //127.0.0.1/FullStack". Sembra che la connettività all'atlante MongoDB sia il problema.
Arvind Krmar,

1
Sono in grado di risolverlo. Il firewall stava bloccando l'accesso, lo stesso poteva essere testato con questo: portquiz.net:27017
Arvind Krmar,

Risposte:


25

vai al pannello di amministrazione dell'atlante mongodb. Vai nella scheda sicurezza> Accesso alla rete> Quindi autorizza il tuo IP aggiungendolo

Vedi questa immagine per individuare il menu specifico

Nota: controlla il tuo IP su Google, quindi aggiungilo


2
L'ho fatto, ma senza fortuna. Piuttosto ho permesso tutti gli IP, ma non funzionava ancora
Arvind Krmar il

fratello, hai impostato correttamente la configurazione del DB
kunal usapkar

Ho creato ruoli per l'accesso db: nome utente: arvind Metodo di autenticazione: SCRAM MongoDBRoles: atlasAdmin @ admin Devo creare qualcosa nel cluster o 'Data Lake'?
Arvind Krmar,

in grado di risolverlo, tutto era corretto, ma il firewall stava bloccando l'accesso alla porta 27017 stesso può essere testato qui: portquiz.net:27017
Arvind Krmar,

va bene ottimo codice
kunal usapkar

6

Assicurarsi che "<" e ">" vengano rimossi quando si sostituiscono i campi utente e password. Questo ha funzionato per me


3

A volte questo errore si verifica a causa dell'indirizzo IP a cui è stato concesso l'accesso al nostro database.

Intendiamoci, la tua applicazione può funzionare bene, quindi trovare questo errore. Ogni volta che ciò accade, la maggior parte delle volte i tuoi indirizzi IP sono cambiati, il che non è nella lista bianca degli indirizzi consentiti.

Tutto quello che devi fare è aggiornare la lista bianca con i tuoi attuali indirizzi IP


2

Inserisci nella lista bianca il tuo indirizzo IP di connessione. Atlas consente le connessioni client al cluster solo dalle voci nella whitelist del progetto. La whitelist del progetto è distinta dalla whitelist dell'API, che limita l'accesso dell'API a indirizzi IP o CIDR specifici.

NOTA

È possibile saltare questo passaggio se Atlas indica nel passaggio Imposta sicurezza connessione che è già stata configurata una voce della whitelist nel cluster. Per gestire la lista bianca IP, vedere Aggiungi voci alla lista bianca.

Se la whitelist è vuota, Atlas richiede di aggiungere un indirizzo IP alla whitelist del progetto. Puoi:

Fai clic su Aggiungi il tuo indirizzo IP corrente per inserire nella whitelist il tuo indirizzo IP corrente.

Fare clic su Aggiungi un indirizzo IP diverso per aggiungere un singolo indirizzo IP o un intervallo di indirizzi con annotazioni CIDR.

Per i cluster Atlas distribuiti su Amazon Web Services (AWS) e utilizzando VPC Peering, è possibile aggiungere un gruppo di sicurezza associato al peer VPC.

È possibile fornire una descrizione facoltativa per l'indirizzo IP o l'intervallo CIDR appena aggiunti. Fare clic su Aggiungi indirizzo IP per aggiungere l'indirizzo alla whitelist.


1

Puoi rimuovere il flag {useUnifiedTopology: true} e reinstallare la dipendenza mongoose! ha funzionato per me.


genera il seguente errore quando {useUnifiedTopology: true} è stato rimosso: (nodo: 10020) DeprecationWarning: il motore di rilevamento e monitoraggio del server corrente è obsoleto e verrà rimosso in una versione futura. Per utilizzare il nuovo motore di rilevamento e monitoraggio del server, passare l'opzione {useUnifiedTopology: true} al costruttore MongoClient.
Arvind Krmar,

1

Ho avuto lo stesso errore. Questi sono i passaggi che ho seguito per risolverlo

  1. Vai alla scheda sicurezza -> Accesso alla rete -> Quindi autorizza il tuo IP
  2. Quindi vai alla scheda sicurezza -> Accesso al database -> ed elimina l'utente corrente.
  3. Crea un nuovo utente fornendo nuovo nome utente e password.
  4. Fornire il nome utente e la password appena creati nel file .env o nel metodo mongoose.connect

Dopo questi passaggi ha funzionato come al solito. spero che questo vi aiuterà ragazzi.


0

Puoi provare:

// 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 se hai effettuato l'accesso al sito web mongo? Hai scelto la versione node 3.00 or latere copiato `` mongodb + srv: // user: <password> @ cluster0-3zrv8.mongodb.net / test? RetryWrites = true & w = maggioranza ''? Ci sono tre opzioni tra cui scegliere, scegliere il nodo centrale
Umbro

Ho selezionato il nodo "Connetti la tua applicazione" e ho copiato la stringa di connessione sopra, sostituendo la password, tuttavia non sono sicuro di quale password debba essere, la password con cui ho effettuato l'accesso ad MongoDB atlast o qualcos'altro? Sto cercando di scoprirlo
Arvind Krmar il

@ArvindKrmar hai fornito una password del database separata
Umbro

Ho creato due utenti nella sezione "Accesso al database" e ho conservato la stessa password utilizzata per accedere a mongoDB per mantenerlo sicuro per il bene o lasciare che l'applicazione iniziasse a funzionare, ma non per fortuna finora.
Arvind Krmar,

1
Il codice funziona quando utilizzo localhost "mongodb: //127.0.0.1/FullStack". Quindi sicuramente la connettività con l'atlante MongoDB ha qualche problema.
Arvind Krmar,

0

ho avuto questo problema, per me la soluzione era controllare se il mio IP fosse configurato correttamente e prima di confermare in questa schermata

inserisci qui la descrizione dell'immagine


1
Ho trovato la soluzione Il problema riguardava le impostazioni del firewall sul mio sistema di rete. portquiz.net:27017 può essere usato per verificare se la connessione è passata . Anche se non ho modificato il firewall in quanto gestito dagli amministratori di rete alla mia estremità, ma una volta che il firewall ha corretto il suo funzionamento ora. Grazie a tutti per i suggerimenti.
Arvind Krmar,

0

Si prega di Controllare la password, la configurazione utente o IP . Principalmente "La selezione del server è scaduta dopo 30000 ms a Timeout._onTimeout" arriva ogni volta che le cose sopra non corrispondono alla configurazione del server.


è stato un problema di firewall alla mia fine. L'ho corretto e ora funziona
Arvind Krmar il

0

Sono in grado di risolvere il problema. Tutto andava bene, ma il firewall stava bloccando l'accesso alla porta 27017. La connettività può essere testata su http://portquiz.net:27017/ o usando telnet per l'endpoint che può essere recuperato dai cluster-> Metriche.

Grazie a tutti per i suggerimenti


0

Prova a creare un nuovo utente nell'accesso al database con il metodo di autenticazione predefinito "SCRAM". Quindi crea un nuovo cluster per quello. Ha funzionato per me! Il mio file 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

Qual è la tua versione di mangusta? perché c'è un problema con una certa versione di mangusta. Per ulteriori informazioni, visitare questo link " https://github.com/Automattic/mongoose/issues/8180 ". Ad ogni modo, stavo affrontando lo stesso problema ma dopo aver usato una versione precedente (5.5.2), ha funzionato per me. Per favore, prova e fammi sapere cosa è successo.


Stavo riscontrando lo stesso problema, tuttavia, sviluppo spesso con la mia VPN attivata e disattivata. Riaccendendo la mia VPN, sono riuscito a connettermi al DB. Spero che questo problema sia temporaneo, perché non posso sempre avere la mia VPN attiva.
Mike K

0

Fondamentalmente potrebbe essere a causa di un aggiornamento npm. Ho appena aggiornato a npm v 6.13.7. e ho iniziato a ricevere quell'errore.

Seguendo le istruzioni di @Matheus, ho commentato la riga "{useUnifiedTopology: true}" e sono stato in grado di superarlo.

Ho aggiornato la mangusta e tutto funziona bene.


0

Stai utilizzando qualsiasi antivirus, firewall, VPN o sulla rete riservata (ad es. Connessione di lavoro / commerciale Wi-Fi / LAN)? Quindi provare a spegnerlo / riconnettersi a una rete diversa. Alcuni IP / connessioni potrebbero essere bloccati dall'amministratore di una rete che si sta utilizzando o semplicemente l'antivirus potrebbe avere criteri firewall. Anche se hai 0.0.0.0nel tuo IP AddressAtlante MongoDB.


0

Ho avuto lo stesso problema. Potrei connettermi dalla MongoDB Compass o dalla mia app Node usando le stringhe di connessione fornite da Atlas. L'ho risolto aggiungendo il mio indirizzo IP alla lista bianca in Atlas.


0

A chiunque stia ancora lottando per questo problema. Ho risolto questo problema impostando tutti i parametri come username, password e dbName nelle stesse opzioni mongoose.

In precedenza il codice era così. (Quando stavo ottenendo l'errore).

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

Nota che url in mongo connect. mongodb://${dbAddress}:${dbPort}/${dbName}.

Nuovo codice senza errori.

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

Nota le opzioni e l'URL.

Questo è il mio ambiente locale. Non produzione env.

Spero ti sia d'aiuto.


0

prova a specificare il driver del nodo, versione 2,2,12 nel cluster -> connetti -> collega la tua applicazione. la nuova stringa deve essere con mongodb: //. usa questa stringa per connetterti. non dimenticare di inserire una password

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.