2014-08-28 14 views
6

Bạn bè của tôi, Thật không may tôi không thể tìm thấy bất kỳ ví dụ nào về cách triển khai thư viện lời hứa bluebird trong nút js express mongoose app.bluebird Các ví dụ điển hình bằng cách sử dụng nodejs, express và mongoose

Ứng dụng của tôi được thiết lập nơi mô hình mongoose, bộ điều khiển và tuyến đường nằm trong các tệp khác nhau.

Nhưng thực hiện nó với mongoose, tôi chỉ không thể tìm ra.

Vì vậy, ai đó có thể cho tôi biết cách sử dụng của nó. Vui lòng xem bên dưới.

//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 Mẫu

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

Vì vậy, xin vui lòng nếu tôi muốn sử dụng thư viện hứa Bluebird, Làm thế nào sẽ để tôi đi về thay đổi export.list

Cảm ơn trước.

Một số câu hỏi,

nơi nào tôi gọi promisify trên mô hình mongoose? ví dụ: Article = mongoose.model('Article'); like this Article = Promise.promisifyAll (require ('Article')); hoặc như thế này

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

Trả lời

10

Ok sau khi sục sạo trên internet trong nhiều tuần, tôi đã có thể tìm thấy một ví dụ here Để làm việc với các mô hình mongoose trong ứng dụng nodejs của bạn,

Bạn cần phải promisify Thư viện và mô hình Instance như vậy trong mô-đun mô hình của bạn, sau khi bạn đã xác định Schema của bạn

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

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

Bây giờ bạn có thể sử dụng m của bạn ongoose mô hình như một lời hứa trong bộ điều khiển của bạn như thế này

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

Thậm chí khó khăn câu hỏi đã được trả lời. Tôi nghĩ rằng một cách tốt hơn để promisify mongoose là phải làm như sau:

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

Bằng cách này tất cả các module tự động có chức năng Async.

Xem thêm: mongoose-bird để thư viện thực hiện chính xác điều này.

2

Bạn thực sự có thể làm một lớp lót đơn giản hơn ở đầu Mô hình của bạn.

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

Tạo mô hình của bạn như bình thường và thì đấy. Mọi thứ đều được khuyến khích cho bạn.

+0

bạn có biết cách thực hiện điều này bằng es6 không? làm cách nào để tôi khuyến khích 'người chăn nuôi nhập khẩu' này từ 'mongoose'; ' –

+0

Tôi tin rằng nó sẽ giống như:' nhập {mongoose} từ 'mongoose'; nhập {bluebird} từ 'bluebird'; var mongoose = bluebird.promisifyAll (mongoose); 'nhưng tôi không chắc chắn. Bạn có thể trộn lẫn commonJS với es6 theo cách, vì vậy tôi sẽ không lo lắng về nó @JesusAdolfoRodriguez –

Các vấn đề liên quan