Express 在mongoose中间件中,exec()和next()调用在级联删除中扮演什么角色?

Express 在mongoose中间件中,exec()和next()调用在级联删除中扮演什么角色?,express,mongoose,mean-stack,meanjs,Express,Mongoose,Mean Stack,Meanjs,我对使用mongoose中间件还不熟悉,不知道自己是否很好地掌握了它。这就是目的。保存department后,我希望填充university并将departmentId保存在university对象中 DepartmentSchema.post('save',函数(下一步){ var departmentId=此。\u id; 芬顿大学({ _这是一所大学 },功能(err,大学){ if(!大学系){ 大学部=[]; } 大学.departments.push(新ObjectId(depar

我对使用mongoose中间件还不熟悉,不知道自己是否很好地掌握了它。这就是目的。保存department后,我希望填充university并将departmentId保存在university对象中

DepartmentSchema.post('save',函数(下一步){
var departmentId=此。\u id;
芬顿大学({
_这是一所大学
},功能(err,大学){
if(!大学系){
大学部=[];
}
大学.departments.push(新ObjectId(departmentId));
university.save(函数(err){
if(err)返回console.log('err-->'+err);
//得救了!
});
});

});Post中间件没有对下一个函数的引用,您无法执行任何流控制。它实际上经过了刚刚保存的部门,因此您的代码可以是这样的:

DepartmentSchema.post('save', function(department) {
  var departmentId = department._id;
pre
中间件中,您可以按执行顺序访问
next
中间件。这是特定钩子的定义顺序

// hook two middlewares before the execution of the save method
schema.pre('save', pre1);
schema.pre('save', pre2);
function pre1(next) {
  // next is a reference to pre2 here
  next()
}
function pre2(next) {
  // next will reference the hooked method, in this case its 'save'
  next(new Error('something went wrong');
}
// somewhere else in the code
MyModel.save(function(err, doc) {
 //It'll get an error passed from pre2
});
Mongoose还为您提供了在中执行
pre
中间件的能力,在这种情况下,所有中间件都将并行执行,但hooked方法在每个中间件调用done之前不会执行


至于exec()函数,在Mongoose中执行查询有两种方法,要么向查询传递回调,要么将其与exec()链接:
User.remove(criteria,callback)
User.remove(criteria).exec(callback)
,如果不向查询传递回调,它将返回一个查询对象,除非用exec()链接它,否则它不会执行。

这是一个很好的见解。你在哪里找到这些信息?我在官方文件中没有看到这一点。您是通过跳进源代码学习到这些东西的吗?现在当我查看文档时,我在那里找到了这些信息。谢谢,很高兴它有帮助,正如您现在发现的,这些都在文档中,但是mongoose文档没有它应该有的那么详细:)