Mongoose: { useUnifiedTopology: true } mengarah ke kesalahan koneksi MongoDB: MongoTimeoutError: Pemilihan server habis setelah 30000 ms

Dibuat pada 20 Sep 2019  ·  78Komentar  ·  Sumber: Automattic/mongoose

Apakah Anda ingin meminta fitur atau melaporkan bug ?

Sebuah bug.

Apa perilaku saat ini?

Setelah memperbarui ke Mongoose 5.7.1, peringatan berikut muncul:

(node:41563) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
    at parseFn (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:312:5)
    at parseConnectionString (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/core/uri_parser.js:628:3)
    at connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:266:3)
    at ConnectOperation.execute (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:191:5)
    at executeOperation (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/execute_operation.js:83:26)
    at MongoClient.connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/mongo_client.js:216:10)
    at Promise (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/connection.js:632:12)
    at Promise._execute (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/debuggability.js:313:9)
    at Promise._resolveFromExecutor (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/promise.js:488:18)
    at new Promise (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/promise.js:79:10)
    at NativeConnection.Connection.openUri (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/connection.js:629:19)
    at Mongoose.connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/index.js:327:15)
    at Object.connect (/Users/tschaffter/dev/PHCCollaborationPortal/server/app.js:17:44)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Module._compile (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Object.newLoader [as .js] (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/Users/tschaffter/dev/PHCCollaborationPortal/server/index.js:12:28)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)

Saya menambahkan useUnifiedTopology: true ke objek konfigurasi luwak saya seperti yang disarankan oleh pesan, meskipun saya tidak menggunakan kumpulan replika MongoDB atau sharded cluster. Inilah cara saya mengonfigurasi dan menghubungkan menggunakan luwak:

``` mongo: {
pilihan: {
// https://mongoosejs.com/docs/deprecations.html
gunakanNewUrlParser: benar,
gunakanFindAndModify: salah,
useCreateIndex: benar,
gunakanUnifiedTopology: benar,
coba sambungkan kembali: 30,
reconnectInterval: 500, // dalam ms
}
},

and here is where I used this `mongo.options` object:

// Hubungkan ke MongoDB
const mongooseConnectionPromise = luwak.connect(config.mongo.uri, config.mongo.options);
luwak.koneksi.on('kesalahan', err => {
console.error( MongoDB connection error: ${err} );
proses.keluar(-1); // eslint-disable-line no-process-exit
});

The warning is gone but the issue is that mongoose is now no longer able to connect:

Kesalahan koneksi MongoDB: MongoTimeoutError: Waktu pemilihan server habis setelah 30000 md
Aplikasi [nodemon] mogok - menunggu perubahan file sebelum memulai...

Here is how I run MongoDB using docker during development:

docker run -p ${MONGO_PORT}:${MONGO_PORT} --name mongo -d mongo
```

Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi.

Lihat di atas

Apa perilaku yang diharapkan?

Luwak harus menghapus peringatan penghentian dan berjalan dengan baik saat menggunakan useUnifiedTopology: true seperti yang disarankan luwak.

Apa versi Node.js, Mongoose dan MongoDB yang Anda gunakan?

Simpul: v10.16.2
Luwak: 5.7.1 (terbaru)
MongoDB: versi db v4.2.0

Masalah terkait:

can't reproduce

Komentar yang paling membantu

Hai! Nama saya Matt dan saya di tim driver di MongoDB. Kami sangat menyesal atas pemadaman yang Anda semua hadapi, dan saya ingin memberikan sedikit pembaruan tentang masalah ini:

Kami sedang dalam proses mencoba untuk menghapus jenis topologi warisan kami yang ternyata merupakan proses yang sangat bedah. Menghapus jenis ini secara bertahap akan sangat membantu mengurangi beban perawatan pengemudi, dan harapan kami adalah itu berarti pengemudi yang lebih stabil dan efisien bagi pengguna kami. Secara khusus, saat memperkenalkan "Topologi Terpadu", kami juga tidak memperkenalkan penulisan ulang kumpulan koneksi dalam upaya mengurangi potensi kesalahan. Ternyata kumpulan koneksi lebih erat digabungkan ke jenis topologi daripada yang kami perkirakan dan sebagai hasilnya kami mengalami beberapa regresi, terutama di sekitar pemantauan server.

Pagi ini saya mendorong driver v3.3.4-rc0 yang seharusnya mengatasi masalah yang Anda hadapi. Kami akan sangat berterima kasih jika Anda dapat mencoba versi ini dan melaporkan kembali dengan pengalaman Anda. Saya telah meninggalkan komentar pada setiap tiket yang ada terkait dengan masalah ini di NODE-2267 , tetapi jangan ragu untuk membuka masalah tambahan di sana jika Anda mengalaminya.

Semua 78 komentar

Gambar buruh pelabuhan apa yang Anda gunakan? Juga, apakah Anda memiliki jejak tumpukan untuk pesan 'Waktu pemilihan server habis'?

Hei, hanya menyodok di sini untuk melaporkan bahwa saya memiliki masalah yang sama.

Saya sendiri tidak menggunakan Docker atau vm apa pun. Yang juga perlu diperhatikan adalah bahwa ini sepertinya tidak terjadi sepanjang waktu, namun hari ini saya tidak dapat mengambil kembali data saya karena batas waktu (30rb), dan masalah ini segera diselesaikan saat menghapus bendera useUnifiedTopology .

Saya terhubung ke cluster Atlas.

Luwak adalah 5.7.1
MongoDb adalah 3.3.2
Nodenya adalah 12.9.1

Menghubungkan seperti ini:

mongoose.createConnection(uri,
    {
        useCreateIndex: true,
        useNewUrlParser: true,
        useUnifiedTopology: true, // commented out currently
        dbName: db_name
    });

Modelnya dibuat seperti ini:

import mongoose from 'mongoose';
import * as db_conns from '../db-connections'; // this is an object of connections generated via createConnection

// ... schema definition, for a model called 'article' from a collection called 'article'

// `site_content` is the name of a connection
export default db_conns.connections.site_content.model(`article`, schema, `article`);

Kemudian diambil seperti ini:

// ...
await query.model.find(query_expr).limit(30); // query_expr can change, however even an empty expression ({}) will cause the same issue
// ...

Panggilan find hang dan mengeluarkan kesalahan batas waktu.

@vkarpov15 Saya menggunakan gambar mongo yang menyediakan MongoDB v4.2.0.
https://hub.docker.com/_/mongo

Saya juga mendapatkan kesalahan yang sama setelah menambahkan { useUnifiedTopology: true } , meskipun kesalahan terjadi secara acak. Pasti ada yang salah. Saya menggunakan gambar mongo terbaru.

luwak
.connect(process.env.MONGO_URI, {
gunakanUnifiedTopology: benar,
gunakanNewUrlParser: benar,
})
.then(() => console.log('DB Terhubung!'))
.catch(err => {
console.log(Kesalahan, err.pesan);
});
Ketika mulai saya dapatkan di konsol:
[Fungsi: Kesalahan] { stackTraceLimit: 16, prepareStackTrace: undefined } koneksi 0 ke acccluster-shard-00-01-xx47j.mongodb. bersih: 27017 ditutup

Ada solusi? Bahkan saya menghadapi masalah ini sekarang ...

Saya memiliki masalah yang sama. Saya seorang programmer junior dan ini pertama kalinya saya menggunakan nodejs-express-graphql-mongoose-mongodbAtlas.

(node:9392) UnhandledPromiseRejectionWarning: MongoTimeoutError: Pemilihan server habis waktu setelah 30000 ms
di Timeout.setTimeout (MyAppPathgraphql2node_modulesmongodblibcoresdamtopology.js:850:16)
pada waktu habis (timers.js:436:11)
di tryOnTimeout (timers.js:300:5)
di listOnTimeout (timers.js:263:5)
di Timer.processTimers (timers.js:223:10)
(node:9392) UnhandledPromiseRejectionWarning: Penolakan janji yang tidak ditangani. Kesalahan ini berasal baik dengan melemparkan ke dalam fungsi async tanpa blok catch, atau dengan menolak janji yang tidak ditangani dengan .catch(). (nomor penolakan: 1)
(node:9392) [DEP0018] DeprecationWarning: Penolakan janji yang tidak ditangani tidak digunakan lagi. Di masa mendatang, penolakan janji yang tidak ditangani akan menghentikan proses Node.js dengan kode keluar bukan nol.
event.js: 174
lempar eh; // Acara 'kesalahan' yang tidak tertangani
^

Kesalahan: baca ECONNRESET
di TLSWrap.onStreamRead (internal/stream_base_commons.js:111:27)
Acara 'kesalahan' yang dipancarkan di:
di TLSSocket.(MyAppPathnode_modulesmongodblibcoreconnectionconnection.js:321:10)
di Object.onceWrapper (events.js:286:20)
di TLSSocket.emit (events.js:198:13)
di emitErrorNT (internal/streams/destroy.js:91:8)
di emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
di process._tickCallback (internal/process/next_tick.js:63:19)

Kami juga mendapatkan kesalahan yang sama pada server produksi kami setelah mengaktifkan useUnifiedTopology .

MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout [as _onTimeout] (/opt/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5)

Saya mulai menghadapi masalah lain sekarang
MaxListenersExceededWarning: Kemungkinan kebocoran memori EventEmitter terdeteksi. 11 topologyDescriptionChanged listener ditambahkan.

Ketika saya mencari peringatan ini, saya menemukan dokumen mongoDB ini
https://jira.mongodb.org/browse/NODE-2123

Ini menyatakan kedua kesalahan
"Waktu pemilihan server habis" serta "MaxListenersExceededWarning" dan kedua kesalahan tersebut disebabkan oleh perubahan topologi terpadu. Saya kira ini adalah perubahan besar yang tidak pernah disebutkan.

Karena saya mengalami kesalahan ini di server langsung saya, saya tidak punya pilihan selain mengatur { useUnifiedTopology: false }. Saya berharap seseorang dari komunitas dapat fokus pada masalah ini dan menyelesaikannya atau memberikan beberapa saran untuk menyelesaikannya.

Saya juga mendapatkan kedua kesalahan ( Pemilihan server habis setelah 30000 ms dan MaxListenersExceededWarning: Kemungkinan kebocoran memori EventEmitter terdeteksi. 11 ) saat menggunakan useUnifiedTopology jadi ini terjadi pada semua orang yang menggunakan opsi ini, saya kira.

Saya sudah mencoba repro ini, tetapi saya belum bisa repro. Saya mencoba beberapa opsi:

1) Membunuh server tepat sebelum menanyakan

2) Menanyakan dengan koneksi terputus

3) Berhasil menjalankan kueri

Saya belum melihat pesan kesalahan ini dalam hal apa pun. Bisakah Anda memodifikasi skrip di bawah ini untuk menunjukkan masalah ini?

'use strict';

const mongoose = require('mongoose');

run().catch(err => console.log(err));

async function run() {
  mongoose.set('useUnifiedTopology', true);
  mongoose.set('useNewUrlParser', true);

  await mongoose.connect('mongodb://localhost:27017/test');

  const Model = mongoose.model('Test', new mongoose.Schema({ name: String }));

  console.log('Query...');
  await Model.findOne();
  console.log('Done');
}

Atau setidaknya berikan beberapa informasi tentang versi Mongoose yang Anda gunakan; apakah Anda menggunakan server mandiri, kumpulan replika, atau kluster sharding; dan apakah Anda menggunakan Mongoose secara langsung atau melalui modul npm lain?

Saya cukup yakin ini bukan masalah dengan luwak, tetapi dengan Mongo itu sendiri.

@vkarpov15 , silakan lihat komentar saya , saya menguraikan lingkungan saya di sana. Saya menggunakan luwak secara langsung.

@vkarpov15 bagi saya masalah ini muncul secara acak setiap 2-3 hari ketika server berjalan, jadi meskipun saya memberikan kode, Anda harus memantau server terus menerus.

Apakah ada yang punya sekitar masalah ini?

Apakah ada yang punya sekitar masalah ini?

Anda tidak bisa menggunakan bendera ini untuk saat ini. Mongo akan memperingatkan Anda bahwa itu akan dinonaktifkan di masa depan atau sesuatu tetapi untuk saat ini tampaknya benar-benar menyelesaikan masalah ini.

Apakah ada yang punya sekitar masalah ini?

Anda tidak bisa menggunakan bendera ini untuk saat ini. Mongo akan memperingatkan Anda bahwa itu akan dinonaktifkan di masa depan atau sesuatu tetapi untuk saat ini tampaknya benar-benar menyelesaikan masalah ini.

ketika saya tidak menggunakan flag useUnifiedTopology: true , saya mengalami kesalahan ini dan aplikasi berhenti,
versi luwak: 5.7.4
Screenshot from 2019-10-10 11-07-11

Dapat mengonfirmasi bahwa berkomentar useUnifiedTopology menyelesaikan masalah di build.gradle saya. Juga terjadi dengan cara (tampaknya) acak.

@rpedroni Sayangnya, itu bukan untuk kami...

Juga terjadi di sini. Server produksi kami merespons dengan pesan di bawah ini. Saya kira saya akan berkomentar menggunakanUnifiedTopology untuk saat ini

Opsi Koneksi MongoDB

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

Log Server

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

Kami juga mengalami masalah ini dan kami tidak menggunakan luwak. Tampaknya ada masalah dengan driver MongoDB untuk Node.js itu sendiri. Masalah ini juga telah dilaporkan di sini https://jira.mongodb.org/browse/NODE-2249
Versi 3.3.3 dari driver yang diterbitkan hari ini harus menambahkan lebih banyak detail ke MongoTimeoutError . Disarankan juga untuk memperbarui driver karena perbaikan bug.

Kesalahan ini adalah hasil dari driver yang tidak dapat terhubung ke server yang memenuhi preferensi baca dari operasi yang diberikan (atau koneksi awal). Ini bisa karena sejumlah alasan, termasuk string koneksi Anda tidak valid atau node di cluster Anda sedang down. Jika Anda memperbarui ke driver v3.3.3 terbaru, kami menyertakan bidang alasan baru dengan MongoTimeoutError yang akan membantu kami menyelidiki lebih lanjut masalah Anda. Selain itu, versi ini menyertakan perbaikan bug yang akan mengakibatkan kesalahan batas waktu pada koneksi awal jika anggota replika tidak tersedia. Harap perbarui driver Anda, dan beri tahu kami jika Anda terus mengalami masalah ini.

Dikutip dari https://jira.mongodb.org/browse/NODE-2249?focusedCommentId=2485028&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment -2485028

Sama di sini, terjadi dalam pengembangan dan produksi, terhubung ke Mongo Atlas :(

Juga memiliki masalah ini menghubungkan ke mongodb atlas. Biasanya terjadi setelah atlas melakukan restart atau pembaruan server atau semacamnya.

Jadi saya masih tidak dapat mereproduksi ini secara lokal dengan set replika. Skrip di bawah ini terus menjalankan kueri dengan sukses bahkan dengan failover set replika atau mematikan yang utama. Jangan mendapatkan kesalahan waktu tunggu pemilihan server:

'use strict';

const mongoose = require('mongoose');

run().catch(err => console.log(err));

async function run() {
  mongoose.set('useUnifiedTopology', true);
  mongoose.set('useNewUrlParser', true);

  await mongoose.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/test?replicaSet=rs');

  const Model = mongoose.model('Test', new mongoose.Schema({ name: String }));


  while (true) {
    console.log(new Date(), 'Query...');
    await Model.findOne();
    await new Promise(resolve => setTimeout(resolve, 5000));
  }
} 

Tebakan terbaik saya adalah penjelasan @rvanmil benar. Coba tingkatkan ke [email protected] (yang akan saya kirimkan dalam beberapa jam) dan lihat apakah masalah ini tetap ada.

Juga, adakah yang tahu jika ada cara untuk memicu restart di Atlas? Mungkin masalah ini hanya terjadi jika Anda menggunakan Atlas?

@ vkarpov15 Saya pikir Anda harus menjeda/melanjutkan cluster untuk memicu restart. Ini hanya mungkin pada ukuran M10+.
Saya juga bertanya-tanya apakah ini mungkin masalah Atlas. Saya belum dapat menguji driver MongoDB yang diperbarui, tetapi saya akan melaporkan kembali ke sini setelah saya melakukannya.

Saya juga mengalami masalah yang sama hari ini dengan tingkat gratis Atlas terlepas dari flag useUnifiedTopology. Kesalahan: MongoTimeoutError: Server selection timed out after 30000 ms

Saya bisa mendapatkan koneksi menggunakan layanan MongoDB lain seperti mLab.

Saya mengalami masalah yang sama dan akhirnya menjadi sesuatu yang agak bodoh, tetapi saya akan membagikannya karena itu dapat membantu seseorang yang berakhir di sini juga.

Saya memeriksa bidang 'alasan' di MongoTimeoutError dan dikatakan 'MongoError: otentikasi buruk gagal.'
Saat itulah saya menyadari bahwa saya menggunakan kata sandi mongoDB di string koneksi saya dan bukan kata sandi pengguna.
Sekarang bekerja dengan baik.

Jika Anda menggunakan MongoDB Atlas, Anda harus memasukkan alamat ip Anda ke daftar putih.

Buka Akses Jaringan, edit alamat ip saat ini dan klik Izinkan Akses dari Mana Saja.

Saya hanya menghadapi masalah ini saat menggunakan Atlas. Saya telah mencoba menambahkan 0.0.0.0/0 IP di daftar putih tetapi juga tidak berhasil.

Saya menggunakan:

  • luwak: 5.7.6
  • simpul: v10.16.3
  • Tingkat gratis Atlas

Tidak dapat mereproduksi di server mongodb lokal. Di sana, setiap kueri hanya berfungsi dengan sukses.

Ini tidak ada hubungannya dengan akses. Saya memiliki akses 0/0/0/0 dan ini terjadi
setiap kali server restart pada atlas. Anda dapat melakukan repro dengan membuat multi node
cluster (m10+) dan pengaturan waktu pemeliharaan terjadwal. Kemudian lari panjang
menjalankan layanan dan itu akan menghasilkan kesalahan saat restart.

Pada Rabu, 23 Oktober 2019, 07:42 Mohammad Mazedul Islam, <
[email protected]> menulis:

Saya hanya menghadapi masalah ini saat menggunakan Atlas. Saya telah mencoba menambahkan
0.0.0.0/0 IP dalam daftar putih tetapi juga tidak berfungsi.

Saya menggunakan:

  • luwak: 5.7.6
  • simpul: v10.16.3
  • Tingkat gratis Atlas

Tidak dapat mereproduksi di server mongodb lokal. Di sana, setiap kueri hanya berfungsi
berhasil.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/Automattic/mongoose/issues/8180?email_source=notifications&email_token=AAUHUCYYQIQ5U42IBYT7CQTQQA2B7A5CNFSM4IYQ3ZB2YY3PNVWWK3TUL52HS4DFVREXG43VMHZW63LN5WWK3TUL52HS4DFVREXG43VMHZW63LN5
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAUHUCY5SNFGGCPTGW6GH5DQQA2B7ANCNFSM4IYQ3ZBQ
.

Saya juga pernah mengalami masalah itu. Tapi sekarang setelah memasukkan 0.0.0.0/0 dan alamat IP saya ke daftar putih dari atlas memecahkan masalah.

~Ini hanya masalah dengan MongoDB Atlas.~

Saya memiliki beberapa masalah menggunakan MongoDB Atlas.

Saya memiliki masalah yang sama menggunakan MongoDB normal.

Saya telah berhasil mereproduksi kondisi yang menyebabkan "MongoTimeoutError: Pemilihan server habis waktu setelah 30000" menggunakan docker-compose.
https://github.com/anzairyo0127/mongodb-connection-bug

Pertama mulai aplikasi ini

$ docker-compose up -d
$ docker-compose exec a mongo /tmp/conf/init.js
$ docker-compose exec node sh
$ npm i && npm run build
$ npm run start
> 0times
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> 1times
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> xtimes
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> ......



md5-cc5c53b3c0322ef988c85b63b4bb6c4e



$ docker-compose restart a b c



md5-788ff0ed4e46daf35b1b8594351b929f



> xtimes
> waiting ....
> (node: 4360) UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms
> at Timeout.setTimeout [as _onTimeout] (/var/work/node_modules/mongodb/lib/core/sdam/topology.js:878:9)
> at ontimeout (timers.js: 436: 11)
> at tryOnTimeout (timers.js: 300: 5)
> at listOnTimeout (timers.js: 263: 5)
> at Timer.processTimers (timers.js: 223: 10)
> (node: 4360) UnhandledPromiseRejectionWarning: Unhandled promise rejection.This error originated either by throwing inside of an> async function without a catch block, or by rejecting a promise which was not handled with .catch (). (rejection id: 1)
> (node: 4360) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that
> are not handled will terminate the Node.js process with a non-zero exit code.

@anzairyo0127 dapatkah Anda mencoba hal yang sama dengan perpustakaan mongodb 3.3.3 terbaru?

@rvanmil saya dapat mereproduksinya di ver3.3.3.

Sepertinya kesalahan ini terjadi ketika mongoDB berada dalam konfigurasi replikasi dan salah satu instance (mungkin instance utama) menerima perintah tepat sebelum turun atau tepat setelah startup.
Saya pikir alasan mengapa ini sering terjadi pada MongoDB Atlas adalah karena MongoDB Atlas secara teratur mengirimkan pertanyaan ke cluster untuk pemantauan.

Ada solusi? masalah ini adalah ....

Masalah yang sama selama lebih dari 1 bulan dan belum terpecahkan -_-

Memperbarui ke [email protected] menyelesaikannya untuk saya.

@octavioamu Bisakah Anda memberikan lebih spesifik? Versi database MongoDB [cluster] apa yang Anda jalankan sebelum 4.2? Versi paket npm luwak dan mongodb apa yang Anda gunakan dan apakah Anda memutakhirkannya? Berapa lama Anda menjalankan 4.2 untuk yakin bahwa itu diselesaikan dalam versi ini?

maaf tidak tahu versi apa yang diinstal, mungkin versi yang sangat lama karena saya tidak bekerja dengan mongo untuk sementara waktu.
Versi luwak ada di @5.7.7
Pesan itu permanen untuk saya dan setelah saya menginstal [email protected] (diinstal melalui minuman) pesan berhenti.

Jika saya menetapkan {useUnifiedTopology: false} saya mendapatkan kegagalan otentikasi

(node:19948) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoError: Authentication failed.]

dan jika saya mengatur {useUnifiedTopology: true} , saya mendapatkan batas waktu

(node:20213) UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms

Passwordnya pasti benar. Ini dapat direproduksi pada sistem lokal dengan versi terbaru dari semuanya dan LST Node.js. Namun, menggunakan string koneksi tanpa otentikasi apa pun tampaknya berfungsi secara lokal. Jadi jika saya mengatur misalnya masalah batas waktu const MONGODB_URI = "mongodb://localhost/fullstack" hilang. Mungkin masalah ini ada hubungannya dengan otentikasi? Inilah MWE yang mereproduksi masalah pada pengaturan lokal saya:

const mongoose = require('mongoose')
// const url = 'mongodb://fullstack:fullstack@localhost/fullstack'
const url = 'mongodb://localhost/fullstack'
console.log('Connection url = ', url, 'connecting')
mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true })
console.log('Connected.')
mongoose.connection.close()

Saya menggunakan gambar Docker terbaru untuk pengaturan MongoDB.

Juga terjadi di sini. Server produksi kami merespons dengan pesan di bawah ini. Saya kira saya akan berkomentar menggunakanUnifiedTopology untuk saat ini

Opsi Koneksi MongoDB

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

Log Server

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

Juga terjadi di sini. Server produksi kami merespons dengan pesan di bawah ini. Saya kira saya akan berkomentar menggunakanUnifiedTopology untuk saat ini

Opsi Koneksi MongoDB

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

Log Server

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

Saya menggunakan mongo db atlas dan kami menghadapi masalah yang sama.

dub-tools-jobs: orders - error MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 29 13:16:30 app/worker.1:      at Timeout.setTimeout [as _onTimeout] (/app/node_modules/mongoose/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 29 13:16:30 app/worker.1:     at ontimeout (timers.js:436:11) 
Oct 29 13:16:30 app/worker.1:     at tryOnTimeout (timers.js:300:5) 
Oct 29 13:16:30 app/worker.1:     at listOnTimeout (timers.js:263:5) 
Oct 29 13:16:30 app/worker.1:     at Timer.processTimers (timers.js:223:10) +2m

ini semua terjadi dengan berkomentar useUnifiedTopology sebagai salah satu rekomendasi yang disarankan

// mongodb connections
var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    // useUnifiedTopology: true,      
    promiseLibrary: global.Promise
};

menggunakan atlas luwak dan mongoDB, pastikan opsi seperti itu:
mongoose.connect(DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })

Setelah ini, jika batas waktu muncul, Anda perlu memasukkan alamat ip Anda dari mongoDB ke daftar putih dengan masuk ke akses jaringan di mongoDB

Seperti yang lain, kesalahan ini membuat aplikasi saya mogok setiap beberapa hari dan saya dapat mengonfirmasi bahwa ini tidak terkait dengan akses atau daftar putih alamat ip.

Saya menggunakan:

  • luwak: 5.7.6
  • simpul: v10.16.3
  • Tingkat gratis Atlas

Untuk saat ini, saya akan mengomentari useUnifiedTopology: true juga. Tampaknya itu mungkin terkait dengan Atlas atau mongo, seperti yang dinyatakan orang lain.

Ini adalah masalah dengan replika set server MongoDB dan solusinya sedang dikerjakan di sini oleh para insinyur MongoDB

https://jira.mongodb.org/browse/NODE-2267

@vkarpov15 mungkin bisa menutup masalah ini karena tidak ada hubungannya dengan luwak.

ketika alamat ip Anda saat ini berubah karena suatu alasan koneksi gagal, Anda harus mengeditnya di daftar putih ip akses jaringan dan menggunakan ip saat ini

Hai! Nama saya Matt dan saya di tim driver di MongoDB. Kami sangat menyesal atas pemadaman yang Anda semua hadapi, dan saya ingin memberikan sedikit pembaruan tentang masalah ini:

Kami sedang dalam proses mencoba untuk menghapus jenis topologi warisan kami yang ternyata merupakan proses yang sangat bedah. Menghapus jenis ini secara bertahap akan sangat membantu mengurangi beban perawatan pengemudi, dan harapan kami adalah itu berarti pengemudi yang lebih stabil dan efisien bagi pengguna kami. Secara khusus, saat memperkenalkan "Topologi Terpadu", kami juga tidak memperkenalkan penulisan ulang kumpulan koneksi dalam upaya mengurangi potensi kesalahan. Ternyata kumpulan koneksi lebih erat digabungkan ke jenis topologi daripada yang kami perkirakan dan sebagai hasilnya kami mengalami beberapa regresi, terutama di sekitar pemantauan server.

Pagi ini saya mendorong driver v3.3.4-rc0 yang seharusnya mengatasi masalah yang Anda hadapi. Kami akan sangat berterima kasih jika Anda dapat mencoba versi ini dan melaporkan kembali dengan pengalaman Anda. Saya telah meninggalkan komentar pada setiap tiket yang ada terkait dengan masalah ini di NODE-2267 , tetapi jangan ragu untuk membuka masalah tambahan di sana jika Anda mengalaminya.

Saya dapat mengonfirmasi bahwa 3.3.4-rc0 telah memperbaiki masalah 👍 Saya akan memberikan hasil tes yang lebih detail nanti.

setelah saya mengubah versi mongodb saya di package.json menjadi
"mongodb": "3.3.4-rc0",
Saya selalu mendapatkan kesalahan (kesalahan ini tidak terjadi ketika versi mongodb ada di 3.3.3):

===============================================
npm ERR! path /tmp/app/node_modules/npm/node_modules/abbrev
npm ERR! kode ENOENT
npm ERR! salah -2
npm ERR! ganti nama panggilan sys
npm ERR! enoent ENOENT: tidak ada file atau direktori seperti itu, ganti nama '/tmp/app/node_modules/npm/node_modules/abbrev' -> '/tmp/app/node_modules/npm/node_modules/.abbrev.DELETE'
npm ERR! enoent Ini terkait dengan npm tidak dapat menemukan file.
npm ERR! baik-baik saja
npm ERR! Log lengkap dari proses ini dapat ditemukan di:
npm ERR! /home/vcap/.npm/_logs/2019-11-06T17_19_55_661Z-debug.log
[31;1m ERROR [0m Tidak dapat membangun dependensi: status keluar 254
Gagal mengkompilasi tetesan: Gagal menjalankan semua skrip pasokan: status keluar 14
Keluar dari status 223

====================================
versi npm saya adalah npm di 6.11.3.

Apakah kesalahan ini berhubungan dengan build mongodb v3.3.4-rc0 baru ini?

@zhenwan ini sepertinya masalah mengunduh paket abbrev . Dugaan saya adalah ada masalah dengan package-lock.json , coba hapus file itu dan jalankan npm install lagi.

Saya dapat mereproduksi kesalahan dan memeriksa apakah itu diselesaikan dengan driver v3.3.4-rc0 menggunakan pengaturan berikut:

  • Server web Node.js mengekspos http api GET /api/todos yang menanyakan koleksi MongoDB todo yang berisi beberapa data sampel
  • Skrip yang memanggil api setiap 500 ms yang berjalan secara lokal di mesin saya
  • Setelah skrip berjalan, picu failover (mulai ulang primer) di MongoDB (di Atlas saya dapat melakukan ini pada kluster M10 dengan memilih opsi menu "Test Failover")

Hasil dari tes ini adalah sebagai berikut:

Mongodb Node.js 3.3.2 useUnifiedTopology false

> MongoDB failover triggered
> MongoDB 'reconnect' event
> A few http calls with +/- 5000ms response times
> MongoDB failover finished
> Everything back to normal

Mongodb Node.js 3.3.2 useUnifiedTopology true

> MongoDB failover triggered
> MongoDB 'close' event
> Many MongoNetworkError errors
    {
      "name": "MongoNetworkError",
      "stack": "Error: connect ECONNREFUSED <ip_redacted>:27017
          at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14)",
      "errorLabels": [
        "TransientTransactionError"
      ]
    }
> EventEmitter memory leak warning
    (node:18) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 topologyDescriptionChanged listeners added to [NativeTopology]. Use emitter.setMaxListeners() to increase limit
> Many MongoTimeoutError errors
    {
      "name": "MongoTimeoutError",
      "stack": "MongoTimeoutError: Server selection timed out after 30000 ms
          at Timeout._onTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16)
          at listOnTimeout (internal/timers.js:531:17)
          at processTimers (internal/timers.js:475:7)"
    }
> MongoDB failover finished
> Server unable to recover MongoDB connection
> Server restarted manually
> Everything back to normal

️ Mongodb Node.js 3.3.4-rc0 useUnifiedTopology true

> MongoDB failover triggered
> MongoDB 'reconnect' event expected but not seen
> A few http calls with +/- 5000ms response times
> A couple failed http calls:
    {
      "name": "MongoError",
      "stack": "MongoError: Cache Reader No keys found for HMAC that is valid for time: { ts: Timestamp(1573064656, 1) } with id: 6756219367492419585
          at Connection.<anonymous> (/app/node_modules/mongodb/lib/core/connection/pool.js:451:61)
          at Connection.emit (events.js:210:5)
          at processMessage (/app/node_modules/mongodb/lib/core/connection/connection.js:368:10)
          at TLSSocket.<anonymous> (/app/node_modules/mongodb/lib/core/connection/connection.js:537:15)
          at TLSSocket.emit (events.js:210:5)
          at addChunk (_stream_readable.js:308:12)
          at readableAddChunk (_stream_readable.js:289:11)
          at TLSSocket.Readable.push (_stream_readable.js:223:10)
          at TLSWrap.onStreamRead (internal/stream_base_commons.js:182:23)",
      "ok": 0,
      "errmsg": "Cache Reader No keys found for HMAC that is valid for time: { ts: Timestamp(1573064656, 1) } with id: 6756219367492419585",
      "code": 211,
      "codeName": "KeyNotFound"
    }
> MongoDB failover finished
> Everything back to normal

Jadi sepertinya berfungsi dengan v3.3.4-rc0 , server dapat memulihkan koneksi dan melanjutkan penyajian data dari MongoDB. Masih ada dua masalah meskipun:

  • Acara 'reconnect' sepertinya hilang
  • Beberapa permintaan gagal dengan pesan kesalahan "Pembaca Cache Tidak ada kunci yang ditemukan untuk HMAC yang valid untuk waktu"

@mbroadst ya, menghapus package-lock.json memecahkan masalah file saya yang hilang.

Tapi saya masih mendapatkan kesalahan:
2019-11-06T12:52:10.35-0600 [CELL/0] OUT Container menjadi sehat
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR /home/vcap/app/node_modules/connect-mongo/src/index.js:135
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR throw err
06-11-2019T12:52:39.06-0600 [APP/PROC/WEB/0] ERR ^
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] Kesalahan ERR: Waktu pemilihan server habis setelah 30000 md
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR di Timeout.setTimeout [sebagai _onTimeout] (/home/vcap/app/node_modules/connect-mongo/node_modules/mongodb/lib/core /sdam/topology.js:878:9)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR pada waktu habis (timers.js:469:11)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR di tryOnTimeout (timers.js:304:5)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR di Timer.listOnTimeout (timers.js:264:5)
06-11-2019T12:52:39.35-0600 [APP/PROC/WEB/0] KELUAR Status keluar 1

@zhenwan sepertinya ini terkait dengan tidak dapat terhubung ke cluster Anda pada koneksi awal. Juga backtrace Anda ke topology.js:878 anehnya tidak menunjuk ke tempat di mana kesalahan dihasilkan, Anda juga tidak menerima jenis yang benar MongoTimeoutError .

Bisakah Anda membuka tiket jira baru sehingga kami dapat melakukan triase kasus khusus Anda. Sepertinya kami membutuhkan lebih banyak detail daripada yang Anda tempel di sini. Terima kasih!

@mbroadst
Terima kasih telah membantu memperbaiki masalah ini. Saya hanya ingin mengatakan, menggunakan v3.3.4-rc0 tidak menyelesaikan masalah saya. Saya masih menerima pesan ini

MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout (api/node_modules/mongodb/lib/core/sdam/topology.js:899:9)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5)

Dalam kasus saya, saya menggunakan loopback-connector-mongodb , tetapi saya mengatur package.json untuk memaksa menggunakan versi terakhir mongodb di resolutions sebagai berikut

"resolutions": {
    "mongodb": "^3.3.4-rc0"
  }

parameter koneksi saya sebagai berikut

"host": "127.0.0.1",
 "port": 27017,
"database": "***",
"password": "***",
"user": "***",
"authSource": "***",
"useNewUrlParser": true,
"enableGeoIndexing": true

di bawah ini adalah parameter lingkungan saya

MongoDB server version: 3.6.3 on localhost
yarn v1.19.1
node v8.16.2 

Terima kasih sebelumnya

memperbarui
Saya juga mencoba menambahkan useUnifiedTopology: true ke parameter koneksi, tetapi mendapatkan hasil yang sama.

Konfirmasi lain di sini, dari seseorang yang menggunakan luwak secara langsung, bahwa useUnifiedTopology: false berfungsi untuk saya.

@mbroadst terima kasih atas pembaruan dari ujung MongoDB. Maafkan ketidaktahuan saya, tetapi apakah perbaikan yang disebutkan di atas dalam mongodb v3.3.4-rc0 cascade turun ke luwak di beberapa titik? Sedikit tidak nyaman dengan gagasan untuk menggunakan fitur usang sebagai solusi di lingkungan prod.

@mmmmoj mirip dengan pertanyaan @zhenwan di atas, jejak tumpukan Anda tampaknya menunjukkan bahwa Anda sebenarnya tidak menjalankan v3.3.4-rc0. Mungkin coba hapus package-lock.json ? Bisakah Anda mengajukan tiket jira sehingga kami dapat menyelidiki secara spesifik kasus Anda.

@bigsee (pria GitHub @vkarpov15 berbicara untuk waktu rilis, tetapi kami bekerja sama dan saya yakin dia tertarik untuk memperbaiki ini untuk kalian semua :)

@mbroadst
selesai! Terima kasih
NODE-2313

@broadst ha! maaf untuk nama yang canggung!

ternyata saya mungkin berbicara terlalu cepat, mungkin mengingat sifat acak dari kesalahan yang muncul. Pada awal aplikasi saya yang dingin, bersama dengan peringatan penghentian yang diharapkan, saya sekarang melihat kesalahan yang sedikit lebih menakutkan ini di log:

Unhandled rejection: { MongoNetworkError: failed to connect to server [myserver.mlab.com:55841] on first connect [{ MongoNetworkError: connection 0 to myserver.mlab.com:55841 timed out
    at Socket.<anonymous> (/var/task/node_modules/mongodb/lib/core/connection/connection.js:335:7)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:420:8)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5) name: 'MongoError', [Symbol(mongoErrorContextSymbol)]: {} }]
    at Pool.<anonymous> (/var/task/node_modules/mongodb/lib/core/topologies/server.js:431:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at connect (/var/task/node_modules/mongodb/lib/core/connection/pool.js:580:14)
    at callback (/var/task/node_modules/mongodb/lib/core/connection/connect.js:109:5)
    at provider.auth.err (/var/task/node_modules/mongodb/lib/core/connection/connect.js:352:21)
    at _authenticateSingleConnection (/var/task/node_modules/mongodb/lib/core/auth/auth_provider.js:66:11)
    at sendAuthCommand (/var/task/node_modules/mongodb/lib/core/auth/scram.js:177:16)
    at Connection.errorHandler (/var/task/node_modules/mongodb/lib/core/connection/connect.js:321:5)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/var/task/node_modules/mongodb/lib/core/connection/connection.js:333:10)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

Dulu MongoTimeoutError tapi sekarang MongoNetworkError ... ...ada ide?

@bigsee kesalahan itu akan menunjukkan bahwa Anda _tidak_ menggunakan topologi terpadu. Harap aktifkan dengan mengirimkan useUnifiedTopology: true ke MongoClient

@mbroadst itu benar, yang saya yakini adalah inti dari masalah ini. Maaf jika saya salah dalam hal itu.

Ketika saya melewati useUnifiedTopology: true peringatan penghentian menghilang tetapi aplikasi saya mogok secara acak dengan kesalahan judul masalah ini MongoTimeoutError: Server selection timed out after 30000 ms .

Seperti @vkarpov15 dan lainnya di atas, saya belum dapat mereproduksi masalah ini secara konsisten. Kesalahan terjadi beberapa kali sehari yang mengakibatkan 502 dan UX yang mengerikan dari waktu ke waktu. Tampaknya menjadi masalah baru.

Seperti yang dilaporkan di atas, solusi pengaturan useUnifiedTopology: false (atau berkomentar) mencegah kesalahan dalam masalah ini, tetapi memulihkan peringatan penghentian dan sekarang MongoNetworkError yang sedikit lebih menakutkan di atas. Selain itu, ini tidak benar-benar mematikan aplikasi saya tetapi membuat saya khawatir bahwa itu akan terjadi pada pengguna di beberapa titik.

@bigsee MongoNetworkError Anda alami bukanlah hal baru, dan itu berarti bahwa driver tidak dapat membuat koneksi awal ke sebuah cluster (kebetulan jika semacam kondisi balapan antara awal aplikasi Anda dan awal cluster Anda menyebabkan ini, maka topologi terpadu akan membantu di sini juga).

Inti dari masalah ini adalah bahwa orang-orang mengikuti panduan untuk menggunakan topologi terpadu, dan ketika mereka melakukannya, mereka mengalami kesalahan batas waktu palsu. v3.3.4-rc0 dirilis untuk mengatasi masalah khusus itu, jadi panduan saat ini adalah menggunakan versi itu yang akan menghapus pemberitahuan penghentian dan memperbaiki masalah batas waktu palsu yang dihadapi orang.

Saya juga harus mengatakan: versi ini tidak akan mencegah kesalahan _all_ timeout. Kesalahan itu disebabkan oleh ketidakmampuan pengemudi untuk melakukan koneksi awal ke sebuah cluster, yang akan menunjukkan semacam konfigurasi (string koneksi) atau kesalahan jaringan di pihak Anda. Dengan topologi terpadu ini akan muncul sebagai MongoTimeoutError dengan bidang reason menunjukkan kesalahan jaringan yang menyebabkan batas waktu pada koneksi awal.

@mbroadst Saya tidak bermaksud menyarankan bahwa MongoNetworkError baru di komentar terakhir saya, jadi mohon maaf jika itu cara membacanya. Ini adalah `MongoTimeoutError yang baru. Semoga lebih jelas, ini adalah proses saya:

  1. aplikasi memiliki konfigurasi dengan useUnifiedTopology: true - semuanya berfungsi seperti yang diharapkan
  2. aplikasi mulai mogok secara acak dan menampilkan MongoTimeoutError cocok dengan judul masalah ini, serta beberapa baris pertama dari pelacakan tumpukan yang disajikan di atas
  3. pencarian Google / SO akhirnya membawa saya ke sini
  4. Saya menggunakan solusi useUnifiedTopology: false disarankan
  5. kesalahan MongoTimeoutError menghilang bersamaan dengan aplikasi mogok. namun, itu digantikan oleh peringatan penghentian pada awalnya. kemudian, nanti, dengan tambahan MongoNetworkError tidak terlihat di aplikasi sebelum mengatur useUnifiedTopology: false

Mungkin, seperti yang Anda sarankan, ini adalah korelasi daripada sebab-akibat. Hanya tampak seperti pistol merokok bagi saya. Setidaknya aplikasi tidak mogok sekarang. Saya hanya khawatir meninggalkan opsi yang sudah usang.

@bigsee Ah! Maaf, saya salah membaca komentar asli Anda yang berarti bahwa Anda mengonfirmasi bahwa perbaikan bug v3.3.4-rc0 menyelesaikan masalah Anda dari v3.3.3 . Apakah Anda memiliki kesempatan untuk mencoba versi baru?

Ini adalah percobaan pertama saya di Mongodb dan saya mengalami kesalahan ini. baca komentar dan ubah db saya ke v3.3.4-rc0 dan itu masih tidak memperbaiki kesalahan

DeprecationWarning: mesin Penemuan dan Pemantauan Server saat ini tidak digunakan lagi, dan akan dihapus di versi mendatang. Untuk menggunakan mesin Penemuan dan Pemantauan Server baru, berikan opsi { useUnifiedTopology: true } ke konstruktor MongoClient.
MongoNetworkError: gagal terhubung ke server [cluster0-shard-00-00-rhdve.mongodb. net:27017 ] pada koneksi pertama [MongoNetworkError: koneksi 3 ke cluster0-shard-00-00-rhdve.mongodb. bersih: 27017 ditutup
di TLSSocket.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnection.js:356:9)
di Object.onceWrapper (events.js:297:20)
di TLSSocket.emit (events.js:209:13)
di net.js:588:12
di TCP.done (_tls_wrap.js:479:7) {
nama: 'MongoNetworkError',
errorLabels: [Array],
}]
di Kolam.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoretopologiesserver.js:433:11)
di Pool.emit (events.js:209:13)
di C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionpool.js:562:14
di C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionpool.js:999:9
saat panggilan balik (C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:109:5)
di C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:129:7
di Connection.errorHandler (C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:321:5)
di Object.onceWrapper (events.js:297:20)
di Connection.emit (events.js:209:13)
di TLSSocket.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnection.js:354:12) {
nama: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
}
TypeError: Tidak dapat membaca properti 'menemukan' yang tidak terdefinisi
di C:laragonwwwVue-express-mongodbserverroutesapiposts.js:12:26

@ Syfon01 kesalahan yang Anda alami adalah karena semacam kesalahan konfigurasi, driver menggunakan topologi lama dan gagal membuat koneksi awalnya ke cluster setelah default 10 detik. Harap periksa string koneksi dan konfigurasi jaringan Anda dan verifikasi bahwa Anda dapat terhubung ke cluster (mungkin dengan shell mongo ). Jika Anda masih mengalami masalah, silakan buka tiket jira sehingga kami dapat melanjutkan percakapan di sana, dan tidak membingungkan orang yang melihat masalah GitHub ini

Untuk orang yang mengalami masalah ini, jika Anda menggunakan Mongo Atlas Cloud Instance, Silakan lihat apakah alamat IP Anda ditentukan dengan benar di tab Akses Jaringan.

Saya memiliki masalah dan tampaknya karena ISP saya memberikan IP Baru setiap kali (DHCP) saya menyambung kembali ke jaringan, Mongo Atlas hanya mencantumkan daftar putih alamat IP yang ditentukan sebelumnya. Semoga ini bisa membantu seseorang.

perbarui - tidak berfungsi

Saya dapat mengatasi masalah ini dengan mengubah struktur kode saya, khususnya panggilan balik sebagai berikut:

mongoose.connect(DATABASE_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
}).then(() => {
    console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`)
    });
}).catch(err => console.log(err));
mongoose.connect(DATABASE_URL, { 
    useNewUrlParser: true, 
    useUnifiedTopology: true,
}, () => {
    console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`);
    });
}).catch(err => console.log(err));

@ mtn2bay itu tidak masuk akal Anda pada dasarnya menggunakan fungsi panggilan balik alih-alih janji, hasilnya masih satu dan sama, satu-satunya perbedaan adalah bahwa dalam fungsi panggilan balik Anda mendapatkan koneksi dan kesalahan dalam fungsi panggilan balik yang tidak Anda masuki alih-alih mengandalkan .then dan .catch, jadi fungsi Anda yang masuk terhubung ke db dan memulai aplikasi dengan cara apa pun meskipun ada kesalahan. coba ini sebagai gantinya

mongoose.connect(DATABASE_URL, { 
    useNewUrlParser: true, 
    useUnifiedTopology: true,
}, (err, connection) => {
if(err) {
console.error(err)
return
}    
console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`);
    })

@khaledosman terima kasih atas koreksinya. Anda benar, saya hanya mengabaikan kesalahan daripada mengatasinya. Saya sebenarnya memiliki masalah dengan jalur db saya.

saya menghadapi masalah yang sama, saya memperbarui paket npm luwak dari 5.6.9 ke 5.7.6 dan masalah hilang.

Untuk orang yang mengalami masalah ini, jika Anda menggunakan Mongo Atlas Cloud Instance, Silakan lihat apakah alamat IP Anda ditentukan dengan benar di tab Akses Jaringan.

Saya memiliki masalah dan tampaknya karena ISP saya memberikan IP Baru setiap kali (DHCP) saya menyambung kembali ke jaringan, Mongo Atlas hanya mencantumkan daftar putih alamat IP yang ditentukan sebelumnya. Semoga ini bisa membantu seseorang.

memecahkan masalah saya
UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms at Timeout.setTimeout (C:\Users\Umer MIB\Desktop\Chatbots2\mongobot\node_modules\mongodb\lib\core\sdam\topology.js:878:9) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10) (node:4304) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) (node:4304) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code

Saya tidak tahu bagaimana itu memecahkan masalah, tetapi saya mengunduh Kompas dan menghubungkannya ke database, cukup salin tautannya. Setelah terhubung, kesalahan itu hilang. Topologi masih benar dalam kode saya. Mungkin itu mengonfigurasi beberapa opsi dengan Kompas yang tidak benar dengan instalasi mongodb biasa. Sekarang saya dapat terhubung tanpa Kompas dan semuanya tampak berfungsi, hanya melakukannya sekali di awal.

Saya mendapat masalah yang sama dan terima kasih kepada forum ini, berhasil dengan mengomentari pengaturan useUnifiedTopology. Namun kemudian saya membatalkan komentar pengaturan ini, tetapi sekarang masih berfungsi dengan baik ... cukup bingung ...

Mongoose v5.7.11 menggunakan driver MongoDB 3.3.4 yang baru dirilis, jadi saya akan menutup masalah ini. Jika Anda mendapatkan pesan kesalahan serupa, buka masalah baru dan ikuti template masalah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat