Lesson 14 / 32

Middleware & Hooks Pattern

Implement logging, authentication and rate limiting with Fastify hooks instead of classic middleware chains.

Why hooks instead of middleware?

Fastify's hooks are more explicit and performant than traditional middleware chains. Each hook has a clear role in the request lifecycle.

Logging middleware with hooks

Use onRequest to log incoming, onSend to log outgoing.

fastify.addHook('onRequest', async (request, reply) => {
  request.startTime = Date.now();
});

fastify.addHook('onSend', async (request, reply, payload) => {
  const duration = Date.now() - request.startTime;
  fastify.log.info({
    method: request.method,
    url: request.url,
    statusCode: reply.statusCode,
    duration,
  });
  return payload;
});