MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

एक्सप्रेस जेएस, मोंगोडब:संदर्भ त्रुटि:डीबी परिभाषित नहीं है जब डीबी का उल्लेख पोस्ट फ़ंक्शन के बाहर किया जाता है

याद रखें MongoClient.connect() एसिंक है। जब आप var user=db.collection('user'); करते हैं तो हो सकता है कि डेटाबेस कनेक्शन तैयार न हो। . डेटाबेस कनेक्शन को एक कॉलबैक किया गया है, उससे पहले नहीं।

जब पहला अनुरोध किया जाता है, तो डेटाबेस कनेक्शन बस स्थापित हो जाता है। आप जितनी देर प्रतीक्षा करेंगे, उतनी ही अधिक संभावना है कि यह काम करेगा, लेकिन फिर भी यह गलत तरीका है।

वैश्विक चरों के साथ काम करना भी बुरा व्यवहार है और इससे भ्रम पैदा होता है और अन्य समस्याएं

संक्षेप में कोड इस तरह दिखना चाहिए

// 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);
  }
}
}

इसे पसंद करें

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

ध्यान दें कि कनेक्शन पहली आवश्यकता पर बनाया गया है, इसलिए यदि आप require('database.js'); जोड़ते हैं ऐप.जे.एस. में आप पहले अनुरोध पर नहीं खोते हैं।

वैकल्पिक रूप से आप वादे का उपयोग कर सकते हैं , जो आपके लिए वेटिंग लॉजिक का ख्याल रखता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं मोंगोडीबी में संग्रह का नाम कैसे बदल सकता हूं?

  2. सभी मौजूदा फ़ील्ड शामिल करें और दस्तावेज़ में नए फ़ील्ड जोड़ें

  3. मॉक/टेस्ट मोंगोडब डेटाबेस Node.js

  4. मोंगोडीबी $ समूह (मोंगो खेल का मैदान)

  5. Golang GraphQL MongoDB डेटाबेस से दिनांक और आईडी प्राप्त करने के लिए संघर्ष कर रहा है