Node.js Mongoose post remove事件不发生';t火

Node.js Mongoose post remove事件不发生';t火,node.js,mongodb,mongoose,mongoose-q,Node.js,Mongodb,Mongoose,Mongoose Q,我的模型中有以下代码: 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

我的模型中有以下代码:

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”

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

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
    });
});
。。。您将能够删除内容实例,并启动pre/post remove事件处理程序

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

这是猫鼬的一个已知怪癖(因为缺少更好的词)。有关更多信息,请查看