【问题标题】:Mongoose post-remove event doesn't fire猫鼬删除后事件不会触发
【发布时间】:2015-05-14 23:56:53
【问题描述】:

我的模型中有这段代码:

ContentSchema.post( 'remove', function( item ) {
    index.deleteObject( item._id )
})

这是我的控制器中的内容:

Content.find( { user: user, _id: contentId } )
.remove( function ( err, count ) {
    if ( err || count == 0 ) reject( new Error( "There was an error deleting that content from the stream." ) )

    resolve( "Item removed from stream" )
})

我希望当控制器中的函数运行时,模型中的函数应该发生。我可以在调试器中看到它根本没有触发。

我正在使用"mongoose": "3.8.23""mongoose-q": "0.0.16"

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-q


    【解决方案1】:

    remove 事件(和其他中间件挂钩)不会在模型级方法上触发。如果使用实例方法,例如:

    Content.findOne({...}, function(err, content){
        //... whatever you need to do prior to removal ...
        content.remove(function(err){
             //content is removed, and the 'remove' pre/post events are emitted
        });
    });
    

    ...您将能够删除内容实例并触发删除前/后删除事件处理程序。

    这样做的原因是,为了让模型级别的方法按您的预期工作,必须获取实例并将其加载到内存中,以及完成 Mongoose 对模型所做的所有糖分加载时。顺便说一句,这个问题并不是唯一要消除的,任何模型级方法都会出现相同的问题(例如,Content.update)。

    这是 Mongoose 的一个已知怪癖(因为缺少更好的词)。欲了解更多信息,请查看Mongoose #1241

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 2013-08-05
      • 2014-09-18
      • 2021-05-16
      • 2017-12-24
      • 2015-01-05
      • 2014-12-05
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多