次のチュートリアルを読んでフルスタックアプリを作成しようとしています。
私はすべてのステップに従い、実行しようとしました:
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'));
助言がありますか?
同じエラーが発生しました。これらは私がそれを解決するために従った手順です
これらのステップの後、それは通常通り機能しました。これが皆さんのお役に立てば幸いです。
パスワードを確認してください、ユーザー名OR IP構成。ほとんどの場合、「Timeout._onTimeoutで30000ミリ秒後にサーバーの選択がタイムアウトしました」が表示されます。サーバー構成。
「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}`);
});
それは基本的にnpmの更新が原因である可能性があります。 npm v 6.13.7にアップデートしました。そして私はそのエラーを受け始めました。
@Matheusからの指示に従って、「{useUnifiedTopology:true}」という行にコメントしましたが、それを通り抜けることができました。
マングースを更新したところ、すべて正常に動作しました。
私は問題を解決することができます。すべては問題ありませんでしたが、ファイアウォールはポート27017へのアクセスをブロックしていました。接続は http://portquiz.net:27017/ でテストするか、クラスターから取得できるエンドポイントへのtelnetを使用してテストできます->指標。
提案をありがとう、みんな
ウイルス対策、ファイアウォール、VPN、または制限されたネットワーク(仕事/商用Wi-Fi/LAN接続など)を使用していますか?次に、それをオフにするか、別のネットワークに再接続します。一部のIP /接続は、使用しているネットワークの管理者によってブロックされているか、単にウイルス対策にファイアウォールポリシーが設定されている可能性があります。あなたが持っている場合でも0.0.0.0
あなたのIP Address
MongoDB Atlasで。
私はこの問題を抱えていました、私の解決策は私のIPが正しく構成されているかどうかを確認してからこの画面で確認することでした
クラスターでノードドライバーのバージョン2、2、12を指定してみてください->接続->アプリケーションに接続します。新しい文字列はmongodb://である必要があります。この文字列を使用して接続します。パスワードを入力することを忘れないでください
削除{useUnifiedTopology:true}フラグを付けて、マングースの依存関係を再インストールできます!それは私のために働いた。
あなたが試すことができます:
// 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);
});
あなたのマングースバージョンは何ですか?特定のマングースバージョンに問題があるためです。詳細については、このリンクにアクセスしてください " https://github.com/Automattic/mongoose/issues/818 "。とにかく、私は同じ問題に直面していましたが、古いバージョン(5.5.2)を使用した後、それは私にとってはうまくいきました。試してみて何があったのか教えてください。
同じ問題がありました。 MongoDB Compassから、またはAtlasから提供された接続文字列を使用してNodeアプリから接続できます。IPアドレスをAtlasのホワイトリストに追加して解決しました。
まだこの問題に苦しんでいる人に。この問題は、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に注意してください。
これは私のローカル環境です。本番環境ではありません。
参考になれば幸いです。