#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
5 min read
Question 15 of 27medium

What is Mongoose middleware (hooks)?

Pre and post hooks for operations.

What You'll Learn

  • Pre middleware
  • Post middleware
  • Common use cases

What is Middleware?

Middleware (hooks) are functions executed before or after certain operations like save, validate, remove.

Pre Middleware

code.jsJavaScript
// Hash password before saving
userSchema.pre('save', async function(next) {
  if (!this.isModified('password')) return next();
  this.password = await bcrypt.hash(this.password, 10);
  next();
});

// Update timestamp
userSchema.pre('save', function(next) {
  this.updatedAt = new Date();
  next();
});

// Pre find - exclude deleted
userSchema.pre(/^find/, function(next) {
  this.where({ deleted: { $ne: true } });
  next();
});

Post Middleware

code.jsJavaScript
// After save
userSchema.post('save', function(doc) {
  console.log('User saved:', doc._id);
});

// After remove
userSchema.post('remove', async function(doc) {
  await Comment.deleteMany({ userId: doc._id });
});

// Error handling
userSchema.post('save', function(error, doc, next) {
  if (error.code === 11000) {
    next(new Error('Email already exists'));
  } else {
    next(error);
  }
});

Query Middleware

code.jsJavaScript
// Pre findOneAndUpdate
userSchema.pre('findOneAndUpdate', function(next) {
  this.set({ updatedAt: new Date() });
  next();
});

Aggregate Middleware

code.jsJavaScript
userSchema.pre('aggregate', function(next) {
  this.pipeline().unshift({ $match: { active: true } });
  next();
});