2016-12-16 85 views
-1

我是新来的猫鼬我只是想了解一旦我们有客户的数据如何保存和使用带有猫鼬模式的nodejs的承诺。在下面的例子中,如果发生任何错误,试图将数据保存到集合处理承诺。如何处理猫鼬的承诺?

model.js

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

var UserAccessSchema = new mongoose.Schema({ 
    firstname: String, 
    lastname: String, 
    uid: String, 
    email: String, 
}); 

export default mongoose.model('UserAccess', UserAccessSchema); 

controller.js

var UserAccess = require('./access.model'); 

export function create(req, res) { 
    console.log(req.body); 
    UserAccess.createAsync(req.body) 
    .then() 
    .catch(); 

} 

index.js

var express = require('express'); 
var controller = require('./access.controller'); 
var router = express.Router(); 

router.post('/', controller.create); 

module.exports = router; 

回答

1

你必须Promise.promisifyAll您要访问的异步对象的对象。

像这样的:

var Promise = require('bluebird') 
var mongoose = require('mongoose'); 

var UserAccessSchema = new mongoose.Schema({ 
    firstname: String, 
    lastname: String, 
    uid: String, 
    email: String, 
}); 

var model = mongoose.model('UserAccess', UserAccessSchema); 

model = Promise.promisifyAll(model) 

export default model; 

这样一来,你将与创建适当async方法模型。

但是,只需要清楚,你不需要蓝鸟与蓝鸟的承诺一起工作。

实际上,您可以在查询.exec()后追加方法以返回Promise。

您可以参考文档中的section

+0

我不认为你需要'.exec()'。我做的东西就像'Model.find()。然后(函数(docs){})' –

+0

@jackblank查询是可以的,但并不意味着它是一个承诺。例如,你没有catch方法。 – thalesmello

+0

谢谢我的想法如何使其工作。 – hussain