🏗️ Architecture

Middleware Patterns

NestJS middleware used for request processing.

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

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

Request Logging Middleware

@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

Sets up tenant and user context for each request:

@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

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

Middleware vs Guards vs Interceptors

ComponentExecutesAccess ToUse Case
MiddlewareBefore allreq, res, nextLogging, CORS
GuardsAfter middlewareExecutionContextAuth, permissions
InterceptorsAround handlerCallHandlerTransform, cache

Edit this page

Copyright © 2023-Present Ever Co. LTD.Docs by Sourcey