var mongoose = require('mongoose'),
Schema = mongoose.Schema,
Promise = mongoose.Promise;
var UserSchema = new Schema({
name: {
type: String,
required: true
}
});
UserSchema.methods.add = function() {
var self = this,
p = new Promise();
self.save(function(error, data) {
if (error) {
p.reject(error);
} else {
p.resolve(null, data);
}
});
return p;
};
mongoose.model('User', UserSchema);
/*
* POST
* create user
*/
var parse = require('co-body'),
mongoose = require('mongoose'),
User = mongoose.model('User');
app.post('/users', function * () {
var body = yield parse(this),
user = new User(body);
yield user.add();
this.body = {
message: 'success',
id: user.id
};
});
就是弄成promise,如果查询,直接exec()就行。
感谢@coderhaoxin 的回复
同时也找到另外一种方法
因为koa支持yield一个promise,所以可以考虑用mongoose-q
promise 或者 thunkify-wrap 试试?
我试试
mongoose-q 是比较好的选择
如今发布问题已经八个月过去了,现在有没有新的解决方法?
@sjfkai https://cnodejs.org/topic/532911255552a20d4102c768
原先用express或者其他框架的代码不需要改动,只要多封装一层处理逻辑就好。例:
//model.js var Post = require(‘…/…/db/models/post’);
module.exports = {
}
大部分的功能在后面加个.exec()即可,mongoose是支持promise的 例如:
那天看到一个支持yield的mongoose库,忘了记下来,现在找不到了。
@coolicer http://mongorito.com/