Mongoose 中间件更新后不起作用

问题描述 投票:0回答:1

回调未被调用,但应该按照 mongoose 中间件中的记录:

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?");
,这是预期的吗?

附: 机器:Windows 10, 猫鼬版本:4.5.8

node.js mongoose mongoose-middleware
1个回答
12
投票

the docs 来看,看起来在

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

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

而不是:

schema.post("update", function(error, res, next) {
  console.log('Update finished.');
});
© www.soinside.com 2019 - 2024. All rights reserved.