我已经实现了两种不同的方法来删除用户,而不是其中一种方法触发"pre"和"post"删除中间件.
我认为
以下是我的模型文件中的两个不同实现:
方法一:
var User = module.exports = mongoose.model('User', userSchema); userSchema.pre('remove', function(next) { // 'this' is the client being removed. Provide callbacks here if you want // to be notified of the calls' result. //Vouchers.remove({user_id: this._id}).exec(); console.log("pre test"); next(); }); userSchema.post('remove', function(next) { // 'this' is the client being removed. Provide callbacks here if you want // to be notified of the calls' result. //Vouchers.remove({user_id: this._id}).exec(); console.log("post test"); next(); }); // Remove User module.exports.removeUser = function(id, callback){ var query = {_id: id}; console.log('test'); //User.remove(query, callback); User.find(query).remove(callback); }
方法二:
var User = module.exports = mongoose.model('User', userSchema); userSchema.pre('remove', function(next) { // 'this' is the client being removed. Provide callbacks here if you want // to be notified of the calls' result. //Vouchers.remove({user_id: this._id}).exec(); console.log("pre test"); next(); }); userSchema.post('remove', function(next) { // 'this' is the client being removed. Provide callbacks here if you want // to be notified of the calls' result. //Vouchers.remove({user_id: this._id}).exec(); console.log("post test"); next(); }); // Remove User module.exports.removeUser = function(id, callback){ var query = {_id: id}; console.log('test'); User.remove(query, callback); }
任何建议将不胜感激.
这就是我让一切工作的方式:
// Remove User module.exports.removeUser = function(id, callback){ User.findById(id, function (err, doc) { if (err) { } doc.remove(callback); }) } //Remove vouchers related to users userSchema.pre('remove', function(next) { this.model('Voucher').remove({ user: this._id }, next); });
http://mongoosejs.com/docs/middleware.html 请参阅文档.按照设计,Model.remove不会触发用于remove的中间件钩子,仅适用于ModelDocument.remove函数.