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

घटनाओं का उपयोग कैसे करें मोंगोडब तर्क को नोड से बाहर रखें। जेएस अनुरोध हैंडलर

यहाँ वह समाधान है जिसके साथ मैं आया हूँ।

मैंने mongojs का इस्तेमाल किया जो मोंगोडब इंटरफ़ेस को बहुत सरल करता है - कॉन्फ़िगरेशन में लचीलेपन की लागत पर - लेकिन यह नेस्टेड कॉलबैक को छुपाता है जिसे मोंगोडब ड्राइवर की आवश्यकता होती है। यह सिंटैक्स को मोंगो क्लाइंट की तरह और भी अधिक बनाता है।

मैं फिर HTTP रिस्पांस ऑब्जेक्ट को क्लोजर में लपेटता हूं और कॉलबैक में इस क्लोजर को मोंगोडब क्वेरी मेथड में पास करता हूं।

var MongoProvider = require('./MongoProvider');
MongoProvider.setCollection('things');

exports.index = function(request, response){
    function sendResponse(err, data) {
        if (err) { 
            response.send(500, err);
        }    
        response.send(data);
    };

    MongoProvider.fetchAll(things, sendResponse);
};

यह अभी भी अनिवार्य रूप से केवल डेटाबेस प्रदाता को प्रतिक्रिया ऑब्जेक्ट पास कर रहा है, लेकिन इसे एक बंद में लपेटकर जो प्रतिक्रिया को संभालना जानता है, यह उस तर्क को मेरे डेटाबेस मॉड्यूल से बाहर रखता है।

मेरे अनुरोध हैंडलर के बाहर प्रतिक्रिया हैंडलर बंद करने के लिए फ़ंक्शन का उपयोग करना थोड़ा सा सुधार है:

function makeSendResponse(response){
    return function sendResponse(err, data) {
        if (err) {
            console.warn(err);
            response.send(500, {error: err});
            return;
        }

        response.send(data);
    };
}

तो अब मेरा अनुरोध हैंडलर इस तरह दिखता है:

exports.index = function(request, response) {
    response.send(makeSendResponse(response));
}

और मेरा MongoProvider इस तरह दिखता है:

var mongojs = require('mongojs');

MongoProvider = function(config) {
this.configure(config);
    this.db = mongojs.connect(this.url, this.collections);
}

MongoProvider.prototype.configure = function(config) {
    this.url = config.host + "/" + config.name;
    this.collections = config.collections;
}

MongoProvider.prototype.connect = function(url, collections) {
    return mongojs.connect(this.url, this.collections);
}

MongoProvider.prototype.fetchAll = function fetchAll(collection, callback) {
    this.db(collection).find(callback);
}

MongoProvider.prototype.fetchById = function fetchById(id, collection, callback) {
    var objectId = collection.db.bson_serializer.ObjectID.createFromHexString(id.toString());

    this.db(collection).findOne({ "_id": objectId }, callback);
}

MongoProvider.prototype.fetchMatches = function fetchMatches(json, collection, callback) {
    this.db(collection).find(Json.parse(json), callback);
}

module.exports = MongoProvider;

मैं एपीआई को सरल बनाने और अतिरिक्त सत्यापन करने के लिए विशिष्ट संग्रहों के लिए MongoProvider का विस्तार भी कर सकता हूं:

ThingsProvider = function(config) {
    this.collection = 'things';
    this.mongoProvider = new MongoProvider(config);
    things = mongoProvider.db.collection('things');
}

ThingsProvider.prototype.fetchAll = function(callback) {
    things.fetchAll(callback);
}

//etc...

module.exports = ThingsProvider;


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. C# के लिए MongoDB ड्राइवर में $addFields का उपयोग करना

  2. MEAN स्टैक के लिए फ़ोल्डर संरचना

  3. मोंगोडब वार्तालाप प्रणाली

  4. $addToSet Mongo ऑपरेटर का उपयोग करके अनेक मान जोड़ें

  5. mongoDB से दस्तावेज़ हटाएं