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

Express js,mongodb:ReferenceError:db tidak ditentukan ketika db disebutkan di luar fungsi posting

Ingat MongoClient.connect() adalah asinkron. Koneksi database mungkin tidak siap pada saat Anda melakukan var user=db.collection('user'); . Koneksi database telah dibuat setelah panggilan balik selesai, tidak lebih awal dari itu.

Ketika permintaan pertama selesai, koneksi database kebetulan dibuat. Semakin lama Anda menunggu, semakin besar kemungkinan itu berhasil, tetapi tetap saja itu pendekatan yang salah.

Juga bekerja dengan variabel global adalah praktik yang buruk dan menyebabkan kebingungan dan masalah lain .

Singkatnya kode akan terlihat seperti

// module database.js
var mongodb= require('mongodb');
var MongoClient= mongodb.MongoClient;
var URL = 'mongodb://127.0.0.1:27017/mainDB';

var db;
var error;
var waiting = []; // Callbacks waiting for the connection to be made

MongoClient.connect(URL,function(err,database){
  error = err;
  db = database;

  waiting.forEach(function(callback) {
    callback(err, database);
  });
});

module.exports = function(callback) {
  if (db || error) {
    callback(error, db);
  } else {
    waiting.push(callback);
  }
}
}

Daripada menggunakannya seperti

var db = require('database.js');

router.post('/',function(req,res,next){
  username=req.body.username;
  password=req.body.password;

  db.conn(function(err, database) {
    if (err) {
      res.sendStatus(500);
      console.log(err);
      return;
    }

    database.collection('users').findOne({'username':username, 'password':password}, function(err, docs){
      //do something
    });
  });
});

Perhatikan bahwa koneksi dibuat pada kebutuhan pertama, jadi jika Anda menambahkan require('database.js'); di App.js. Anda tidak kehilangan permintaan pertama.

Atau Anda dapat menggunakan janji , yang menangani logika menunggu untuk Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Temukan postingan terbaru &terdekat, batasi 20

  2. Bagaimana cara membuat kueri equals dinamis menggunakan Apache Camel dan MongoDB?

  3. Bisakah Anda mencari model lain dengan metode instance di Mongoose?

  4. Masukkan atau Perbarui ke Mongo menggunakan luwak dan ubah elemen dalam saat memperbarui

  5. Suka mencari di MongoDB dengan perpustakaan Monk