CNode

mongoose 与 koa 如何比较好的结合

Ddemohi发布于12 年前最后回复10 年前14 回复21801 浏览0 收藏

###没发现类似co-mongoose的项目,为每一个操作进行thunkify,感觉很麻烦

请问有没有mongoose与koa 结合的示范代码

查看回复

回复 (13)

D
demohi#1·12 年前

感谢@coderhaoxin 的回复

同时也找到另外一种方法

undoZen/yieldwiki

D
demohi#2·12 年前

mongoose-q 是比较好的选择

S
sjfkai#3·12 年前

如今发布问题已经八个月过去了,现在有没有新的解决方法?

H
hellopao#5·12 年前

原先用express或者其他框架的代码不需要改动,只要多封装一层处理逻辑就好。例: //model.js var Post = require('../../db/models/post');

module.exports = {

fetch: function * () {
	var fetch = thunkify(Post.fetch, Post);
	var postList = yield fetch();
	return postList;
}

}

S
SoaringTiger#6·12 年前

大部分的功能在后面加个.exec()即可,mongoose是支持promise的 例如:

var user=yield userModel.findByIdAndUpdate(userBody._id, userBody).exec();
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()就行。

var user = yield User.findById(id).exec();
L
littlehaker#8·12 年前

因为koa支持yield一个promise,所以可以考虑用mongoose-q

C
coolicer#10·12 年前

那天看到一个支持yield的mongoose库,忘了记下来,现在找不到了。

K
kylezhang#12·11 年前

mark

3
353355756#13·10 年前

mark

参与回复
登录后即可参与回复。登录