4

回调没有被调用,但它应该按照猫鼬中间件中的记录:

schema.post('update', function(error, res, next) {
  if (error.name === 'MongoError' && error.code === 11000) {
    next(new Error('There was a duplicate key error'));
  } else {
    next(error);
  }
});

我尝试了预更新并且它有效:

schema.pre("update", function(next) {
    console.warn('results', "i am called");
    next(new Error("error line called"));
});

但我想要的是发布更新:

schema.post("update", function(error, res, next) {
    console.warn('results', "is this called?");
});

实际模型更新:

MyModel.update({_id : 123}, req.payload, function (err, numberAffected, rawResponse) {
    reply("done!");
});

我没有看到日志console.warn('results', "is this called?");,这是预期的吗?

ps:机器:windows 10,猫鼬版本:4.5.8

4

1 回答 1

8

通过docs,看起来您应该在schema.post的回调函数中只有一个参数来表示已更新的文档。钩子可能永远不会调用您的回调,因为它从未提供其余参数。例如:

schema.post("update", function(doc) {
  console.log('Update finished.');
});

代替:

schema.post("update", function(error, res, next) {
  console.log('Update finished.');
});
于 2017-01-20T04:51:19.177 回答