蓝鸟Promisies crud使用nodejs,express和mongoose的例子

我的朋友们,不幸的是,我找不到任何关于如何在节点js express mongoose应用程序中实现蓝鸟承诺库的例子。

我的应用程序设置在mongoose模型,控制器和路线在不同的文件。

但是用mongoose来执行它,我只是不知道。

所以请有人告诉我它是如何使用的。 请看下面。

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

// Mongoose Model

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

所以请如果我想使用蓝鸟承诺库,我将如何去改变export.list

提前致谢。

一些问题,

我在哪里叫在mongoose模型promisify? eg Article = mongoose.model('Article'); like this Article = mongoose.model('Article'); like this = Promise.promisifyAll(require('Article')); 或者像这样

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

好吧,在网上search几个星期后,我可以在这里find一个例子。为了在你的nodejs应用程序中使用mongoose模型,

在您定义模式之后,您需要在模型模块中像这样提交库和模型实例

 var Article = mongoose.model('Article', ArticleSchema); Promise.promisifyAll(Article); Promise.promisifyAll(Article.prototype); exports.Article = Article; //Replace Article with the name of your Model. 

现在你可以用你的mongoose模型作为你的控制器的承诺

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

你实际上可以在你的模型的顶部做一个更简单的单线程。

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

像正常创build你的模型,瞧。 一切都为你而设。

即使这个问题很难回答。 我认为一个更好的方法来promo的mongoose是做到以下几点:

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

这样所有的模块自动具有asynchronousfunction。

另请参阅: mongoose鸟图书馆正在做这个。