在后期保存中间件中使用静态方法

我有一个静态方法来执行一个find(),并在应用程序启动时将Campaign数据添加到Redis。

CampaignSchema.statics.activeCampaignsToRedis = function () { this .find() .where('active').equals(true) ... }; 

我想添加一个后保存钩子,当新的Campaign被添加或修改时,它会重新运行静态方法来更新Redis中的数据。

 CampaignSchema.post('save', function (next) { // call CampaignSchema.statics.activeCampaignsToRedis(); }); 

您的保存后中间件callback接收保存的文档作为其一个参数,而不是下一个函数。 从那里你可以通过它的(未logging的) constructor属性访问文档的模型。

所以你可以写你的中间件function为:

 CampaignSchema.post('save', function (doc) { doc.constructor.activeCampaignsToRedis(); });