# Middleware Patterns {#middleware-patterns}


NestJS middleware used for request processing.


## Overview {#overview}


Middleware executes before route handlers and guards. Gauzy uses middleware for:

- Request logging
- CORS configuration
- Request context setup
- Rate limiting
- Request body parsing


## Global Middleware {#global-middleware}


```typescript
// main.ts
app.use(helmet());
app.use(compression());
app.enableCors({
  origin: process.env.CLIENT_BASE_URL,
  credentials: true,
});
```


## Request Logging Middleware {#request-logging-middleware}


```typescript
@Injectable()
export class RequestLoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    const start = Date.now();
    res.on("finish", () => {
      const duration = Date.now() - start;
      console.log(`${req.method} ${req.url} ${res.statusCode} ${duration}ms`);
    });
    next();
  }
}
```


## Request Context Middleware {#request-context-middleware}


Sets up tenant and user context for each request:

```typescript
@Injectable()
export class RequestContextMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    const requestContext = new RequestContext(req, res);
    RequestContext.setCurrentContext(requestContext);
    next();
  }
}
```


## Applying Middleware {#applying-middleware}


```typescript
@Module({})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(RequestLoggerMiddleware, RequestContextMiddleware)
      .forRoutes("*");
  }
}
```


## Middleware vs Guards vs Interceptors {#middleware-vs-guards-vs-interceptors}


| Component    | Executes         | Access To        | Use Case          |
| ------------ | ---------------- | ---------------- | ----------------- |
| Middleware   | Before all       | req, res, next   | Logging, CORS     |
| Guards       | After middleware | ExecutionContext | Auth, permissions |
| Interceptors | Around handler   | CallHandler      | Transform, cache  |


## Related Pages {#related-pages}


- [Request Lifecycle](https://sourcey-gauzy.pages.dev/architecture/request-lifecycle/index.md) — full flow
- [Guard System](https://sourcey-gauzy.pages.dev/architecture/guard-system/index.md) — guards
- [Interceptor Patterns](https://sourcey-gauzy.pages.dev/architecture/interceptor-patterns/index.md) — interceptors
