[译]Mongoose指南 - 中间件

中间件是一些函数, 当document发生init, validate, save和remove方法的时候中间件发生. 

中间件都是document级别的不是model级别的.

下面讲讲两种中间件pre和post

pre

一共有两种pre中间件serial和parallel 发生在被附挂方法之前

serial

serial中间件是一个一个执行的串行执行

var schema = new Schema(..);
schema.pre('save', function(next){
  //do stuff
  next();
});

parallel

并行执行

var schema = new Schema({...});
schema.pre('save', true, function(next, done){
   //calling next kicks off the next middleware in parallel
   next();
   doAsync(done);
});

这个例子中被hooked的方法是save, 直到所有的中间件都done了save才会真正被执行

错误处理

如果中间件调用一个包含error的next, 流程会被终止, 错误会被发送到callback

schema.pre('save', function(next){
  var err = new Error('something went wrong');
  next(err);
});

//later...

myDoc.save(function(err){
  console.log(err.message) // something went wrong
});

  

post

发生在被附挂的方法之后. post中间件不直接参与到整个流程, 所以他的callback没有next也没有done

schema.post('init', function (doc) {
  console.log('%s has been initialized from the db', doc._id);
})
schema.post('validate', function (doc) {
  console.log('%s has been validated (but not saved yet)', doc._id);
})
schema.post('save', function (doc) {
  console.log('%s has been saved', doc._id);
})
schema.post('remove', function (doc) {
  console.log('%s has been removed', doc._id);
})

注意了!!!

如果更新操作直接发生在数据库上pre和post不会被调用, 包含Model.update,  findByIdAndUpdate, findOneAndUpdate, findOneAndRemove, findByIdAndRemove

转载于:https://www.cnblogs.com/irocker/p/mongoose-middleware.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值