# Middleware — NestJS: Scalable Node.js APIs बनाना

Source: https://www.skillbyai.com/hi/nestjs/nestjs-middleware

> Middleware classes से route handlers से पहले logic चलाएँ और module की configure method में चुने routes पर लगाएँ।

## Middleware लिखें

Middleware एक function या class है जो route handler से पहले/बाद में चलता है।

```typescript
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`${req.method} ${req.path}`);
    next();
  }
}
```

## Middleware लागू करें

Module के `configure()` method में apply करें, intercept करने के लिए routes को specify करते हुए।

```typescript
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('users'); // or use { path: 'users', method: RequestMethod.GET }
  }
}
```

## Functional middleware

middleware `(req, res, next)` वाला साधारण function है।

- `next()` call करें वरना request अटक जाती है।
- `consumer.apply(...).forRoutes('users')` इसे एक route prefix से जोड़ता है।

```ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

function logger(req: Request, _res: Response, next: NextFunction) {
  console.log(`${req.method} ${req.url}`);
  next();
}

@Module({})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(logger).forRoutes('users');
  }
}
```

त्वरित जाँच

**Quiz:** request lifecycle में सबसे पहले क्या चलता है?

- [ ] Guards
- [ ] Pipes
- [x] Middleware

*Answer:* Middleware. क्रम है middleware, guards, interceptors (before), pipes, handler।
