web-dev-qa-db-ja.com

MongoDB接続エラー:MongoTimeoutError:サーバー選択が30000ミリ秒後にタイムアウトしました

次のチュートリアルを読んでフルスタックアプリを作成しようとしています。

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: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){name: 'MongoTimeoutError'、reason:Error:connect ETIMEDOUT 99.80.11.208:27017 at TCPConnectWrap.afterConnect [as oncomplete](net。 js:1128:14){name: 'MongoNetworkError'、[Symbol(mongoErrorContextSymbol)]:{}}、[Symbol(mongoErrorContextSymbol)]:{}}(node:42892)UnhandledPromiseRejectionWarning:MongoTimeoutError:30000ミリ秒後にサーバーの選択がタイムアウトしました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)

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

助言がありますか?

11
Arvind Krmar

同じエラーが発生しました。これらは私がそれを解決するために従った手順です

  1. セキュリティタブ->ネットワークアクセス->に移動し、IPをホワイトリストに登録します。
  2. 次にセキュリティタブ->データベースアクセス->に移動し、現在のユーザーを削除します。
  3. 新しいユーザー名とパスワードを入力して、新しいユーザーを作成します。
  4. 。envファイルまたはmongoose.connectメソッドに、新しく作成したユーザー名とパスワードを入力します

これらのステップの後、それは通常通り機能しました。これが皆さんのお役に立てば幸いです。

1

パスワードを確認してください、ユーザー名OR IP構成。ほとんどの場合、「Timeout._onTimeoutで30000ミリ秒後にサーバーの選択がタイムアウトしました」が表示されます。サーバー構成。

0
vaibhav

「SCRAM」であるデフォルトの認証方法を使用して、データベースアクセスで新しいユーザーを作成してみてください。次に、そのための新しいクラスターを作成します。それは私のために働いた!私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:[email protected]/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
Adarsh Pawar

それは基本的にnpmの更新が原因である可能性があります。 npm v 6.13.7にアップデートしました。そして私はそのエラーを受け始めました。

@Matheusからの指示に従って、「{useUnifiedTopology:true}」という行にコメントしましたが、それを通り抜けることができました。

マングースを更新したところ、すべて正常に動作しました。

0
Foz

私は問題を解決することができます。すべては問題ありませんでしたが、ファイアウォールはポート27017へのアクセスをブロックしていました。接続は http://portquiz.net:27017/ でテストするか、クラスターから取得できるエンドポイントへのtelnetを使用してテストできます->指標。

提案をありがとう、みんな

0
Arvind Krmar

ウイルス対策、ファイアウォール、VPN、または制限されたネットワーク(仕事/商用Wi-Fi/LAN接続など)を使用していますか?次に、それをオフにするか、別のネットワークに再接続します。一部のIP /接続は、使用しているネットワークの管理者によってブロックされているか、単にウイルス対策にファイアウォールポリシーが設定されている可能性があります。あなたが持っている場合でも0.0.0.0あなたのIP Address MongoDB Atlasで。

0

私はこの問題を抱えていました、私の解決策は私のIPが正しく構成されているかどうかを確認してからこの画面で確認することでした

ここに画像の説明を入力

クラスターでノードドライバーのバージョン2、2、12を指定してみてください->接続->アプリケーションに接続します。新しい文字列はmongodb://である必要があります。この文字列を使用して接続します。パスワードを入力することを忘れないでください

0
dkovskij

削除{useUnifiedTopology:true}フラグを付けて、マングースの依存関係を再インストールできます!それは私のために働いた。

0
Matheus

あなたが試すことができます:

// 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:[email protected]: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);
});
0
Umbro

あなたのマングースバージョンは何ですか?特定のマングースバージョンに問題があるためです。詳細については、このリンクにアクセスしてください " https://github.com/Automattic/mongoose/issues/818 "。とにかく、私は同じ問題に直面していましたが、古いバージョン(5.5.2)を使用した後、それは私にとってはうまくいきました。試してみて何があったのか教えてください。

0
Walid Ahmed

同じ問題がありました。 MongoDB Compassから、またはAtlasから提供された接続文字列を使用してNodeアプリから接続できます。IPアドレスをAtlasのホワイトリストに追加して解決しました。

0
rekwet

まだこの問題に苦しんでいる人に。この問題は、mongooseオプション自体にユーザー名、パスワード、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;
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;
    }
});

Mongo connectの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;
    }
});

オプションとURLに注意してください。

これは私のローカル環境です。本番環境ではありません。

参考になれば幸いです。

0
Lalit Sharma