2014-08-28 16 views
6

Amici miei, Purtroppo non trovo alcun esempio su come implementare la libreria di promessa bluebird in un nodo js express manga app.bluebird Promette l'esempio di crud usando nodejs, express e mangusta

La mia app è impostata in cui il modello, i controller e le rotte della mangusta sono in file differenti.

Ma implementandolo con mangusta, non riesco a capirlo.

Quindi, per favore qualcuno può mostrarmi come è usato. Vedi sotto.

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

// Mangusta Modello

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

Quindi, per favore, se volevo usare biblioteca promessa Bluebird, Come potrei fare per cambiare export.list

Grazie in anticipo.

Alcune domande,

dove chiamo promisify sul modello mangusta? , ad esempio Article = mongoose.model('Article'); like this Articolo = Promise.promisifyAll (richiedere ('Articolo')); o come questo

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

risposta

10

Ok dopo aver setacciato tutto l'internet per settimane, sono stato in grado di trovare un esempio here Per poter lavorare con modelli mangusta nel vostro app nodejs,

È necessario promisify la Biblioteca e il modello di istanza in questo modo nel modulo del modello, dopo aver definito lo schema

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

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

Ora è possibile utilizzare il m ongoose model come promessa nel tuo controller come questo

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

Anche a questa domanda è già stata data una risposta. Penso che un modo migliore per promisify mangusta è quello di effettuare le seguenti operazioni:

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

In questo modo tutti i moduli hanno automaticamente le funzioni asincrone.

Vedere anche: mongoose-bird per una libreria che esegue esattamente questo.

2

In realtà, è possibile eseguire uno one-liner ancora più semplice nella parte superiore del modello.

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

Crea il tuo modello come normale e voilà. Tutto è promesso per te.

+0

sai come fare questo con es6? come promisifico questo 'import mangusta da 'mangusta';' –

+0

Credo che sarebbe qualcosa di simile: 'import {mangusta} da 'mangusta'; importazione {bluebird} da "bluebird"; var mongoose = bluebird.promisifyAll (mangusta); 'ma non ne sono sicuro. Puoi mescolare commonJS con es6 in entrambi i casi quindi non mi preoccuperei di questo @JesusAdolfoRodriguez –

Problemi correlati