3.12 Mongoose的中间件

中间件执行时间

前后钩子即pre()post()方法,又称为中间件,是在执行某些操作时可以执行的函数。中间件在schema上指定,类似于静态方法或实例方法等,可以在数据库执行下列操作时,设置前后钩子

    init
    validate
    save
    remove
    count
    find
    findOne
    findOneAndRemove
    findOneAndUpdate
    insertMany
    update

Serial串行

串行使用pre方法,执行下一个方法使用next调用

    var schema = new Schema(...);
    schema.pre('save',function(next){
      //做点什么
      next();
    });

Parallel并行

并行提供更细粒度的操作

使用场景

  1. 复杂的验证

  2. 删除有主外关联的doc

  3. 异步默认

  4. 某个特定动作触发异步任务,例如触发自定义事件和通知

例如,可以用来做自定义错误处理

pre()前置先执行钩子

以find()方法为例,在执行find()方法之前,执行pre()方法

post()前置后执行钩子

post()方法并不是在执行某些操作后再去执行的方法,==而在执行某些操作前最后执行的方法==,==post()方法里不可以使用next()==

注意:post 是在某些操作前 最后执行的方法,内部没有next()

总的执行时间顺序

  1. 最先执行 字段的Setter

  2. 然后执行 字段的validate

  3. 然后执行pre

  4. 最后执行post

Last updated