MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perilaku kebutuhan di node.js

Ada 3 poin kunci yang harus dipahami di sini dan kemudian saya akan menjelaskannya secara detail.

  1. module.exports adalah sebuah objek dan objek-objek dilewatkan oleh salinan referensi dalam JavaScript.
  2. memerlukan adalah sinkron fungsi.
  3. client.connect adalah asinkron fungsi.

Seperti yang Anda sarankan, ini adalah masalah waktu. node.js tidak dapat mengetahui bahwa module.exports akan berubah nanti. Bukan itu masalahnya. Bagaimana ia tahu itu?

Ketika require berjalan, ia menemukan file yang memenuhi persyaratannya berdasarkan jalur yang Anda masukkan, membacanya dan menjalankannya, dan menyimpan modul. ekspor sehingga modul lain dapat require modul yang sama dan tidak perlu menginisialisasi ulang (yang akan mengacaukan pelingkupan variabel, dll.)

client.connect adalah panggilan fungsi asinkron, jadi setelah Anda menjalankannya, modul menyelesaikan eksekusi dan require call menyimpan salinan referensi module.exports dan mengembalikannya ke users.js. Kemudian Anda mengatur module.exports = db , tapi sudah terlambat. Anda mengganti referensi module.exports dengan referensi ke db, tetapi ekspor modul di node require cache menunjuk ke objek lama.

Lebih baik mendefinisikan module.exports sebagai fungsi yang akan mendapatkan koneksi dan kemudian meneruskannya ke fungsi panggilan balik seperti:

var mongodb = require("mongodb");
var client = mongodb.MongoClient;

module.exports = function (callback) {
    client.connect('mongodb://host:port/dbname', { auto_reconnect: true },
          function(err, db) {
             if (err) {
                console.log(err);
                callback(err);
             } else {
                // export db as member of exports
                callback(err, db);
             }
          }
    )
};

Peringatan:meskipun di luar cakupan jawaban ini, berhati-hatilah dengan kode di atas untuk memastikan Anda menutup/mengembalikan koneksi dengan benar, jika tidak, Anda akan membocorkan koneksi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengubah array mongo menjadi objek dengan pasangan nilai kunci

  2. Jumlah koneksi ke server MongoDB

  3. Spring Data Mongo Repository ::Metode bersama yang umum di semua masalah Repo

  4. Bagaimana cara mendapatkan hunian kumpulan koneksi saat ini pada klien menggunakan driver mongo .net?

  5. MongoDB - mematikan dengan kode 48