2014-08-28 3 views
6

मेरे बंदे मित्र, दुर्भाग्य से मैं नहीं कर सकते हैं कि कैसे एक नोड js एक्सप्रेस नेवला अनुप्रयोग में Bluebird वादा पुस्तकालय को लागू करने पर किसी भी उदाहरण हैं।Bluebird उदाहरण CRUD NodeJS का उपयोग कर Promisies, एक्सप्रेस और नेवला

मेरे ऐप सेटअप जहां नेवला मॉडल, नियंत्रकों और मार्गों अलग फ़ाइलों में हो रहा है।

लेकिन नेवला साथ लागू, मैं सिर्फ नहीं कर सकते यह आंकड़ा बाहर।

तो कृपया कोई मुझे दिखा सकता है कि इसका इस्तेमाल किया। कृपया नीचे देखे।

//express controller Article.js 


var mongoose = require('mongoose'), 
errorHandler = require('./errors'), 
Article = mongoose.model('Article'); 

exports.list = function(req, res) { 
Article.find().sort('-created').populate('user', 'displayName').exec(function(err, articles) { 
     if (err) { 
      return res.status(400).send({ 
      message: errorHandler.getErrorMessage(err) 
      }); 
     } else { 
      res.jsonp(articles); 
     } 
    }); 
}; 

// नेवला मॉडल

/** 
* Module dependencies. 
*/ 
var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 

/** 
* Article Schema 
*/ 
var ArticleSchema = new Schema({ 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    title: { 
     type: String, 
     default: '', 
     trim: true, 
     required: 'Title cannot be blank' 
    }, 
    content: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
}); 

mongoose.model('Article', ArticleSchema); 

इसलिए कृपया अगर मैं Bluebird वादा पुस्तकालय उपयोग करना चाहता था, कैसे मैं पहले से export.list बदलते

धन्यवाद के बारे में जाना होगा।

कुछ प्रश्न,

जहां मैं नेवला मॉडल पर promisify कहते हैं? उदाहरण Article = mongoose.model('Article'); like this आलेख = Promise.promisifyAll (आवश्यकता ('आलेख')); या की तरह इस

var Article = mongoose.model('Article'); 
    Article = Promise.promisifyAll(Article); 

उत्तर

10

ठीक सप्ताह के लिए इंटरनेट के आसपास परिशोध के बाद, मैं एक उदाहरण here के लिए अपने NodeJS अनुप्रयोग में नेवला मॉडल के साथ काम करने के लिए,

आप promisify से संबंधित सभी जानकारियां करने में सक्षम था लाइब्रेरी और इतने अपने मॉडल मॉड्यूल में, की तरह मॉडल उदाहरण के बाद आप अपने स्कीमा को परिभाषित किया है

var Article = mongoose.model('Article', ArticleSchema); 
Promise.promisifyAll(Article); 
Promise.promisifyAll(Article.prototype); 

exports.Article = Article; 
//Replace Article with the name of your Model. 

अब आप अपने मीटर का उपयोग कर सकते इस नियंत्रक में एक वादे के रूप में ऑनगोज़ मॉडल

exports.create = function(req, res) { 
    var article = new Article(req.body); 
    article.user = req.user; 

    article.saveAsync().then(function(){ 
     res.jsonp(article); 
    }).catch(function (e){ 
     return res.status(400).send({ 
      message: errorHandler.getErrorMessage(e) 
     }); 
    }); 
    }; 
1

यहां तक ​​कि कठिन सवाल भी पहले से ही उत्तर दिया गया है। मुझे लगता है कि नेवला promisify लिए एक बेहतर तरीका निम्न करने के लिए है:

Promise.promisifyAll(mongoose.Model); 
Promise.promisifyAll(mongoose.Model.prototype); 
Promise.promisifyAll(mongoose.Query.prototype); 

इस तरह सभी मॉड्यूल स्वचालित रूप से Async कार्य हैं।

यह भी देखें: mongoose-bird लाइब्रेरी के लिए यह वास्तव में कर रहा है।

2

आप वास्तव में अपने मॉडल के शीर्ष पर एक भी सरल एक लाइनर कर सकते हैं।

var mongoose = require('bluebird').promisifyAll(require('mongoose')); 

अपना मॉडल सामान्य, और वॉयला जैसे बनाएं। सब कुछ आपके लिए promisified है।

+0

आप कैसे ES6 के साथ ऐसा करने में पता है? मैं 'मोंगोज़' से 'आयात मोंगोज़' को कैसे प्रचारित करूं; ' –

+0

मेरा मानना ​​है कि यह कुछ ऐसा होगा: 'mongoose' से आयात {mongoose}; 'ब्लूबर्ड' से आयात {bluebird}; var mongoose = bluebird.promisifyAll (mongoose); 'लेकिन मुझे यकीन नहीं है। आप सामान्य जेएस को एएस 6 के साथ किसी भी तरह से इंटरमीक्स कर सकते हैं इसलिए मैं इसके बारे में चिंता नहीं करता @JesusAdolfoRodriguez –

संबंधित मुद्दे