NestJS Exception filter : Create Custom Exception Filter In NestJS In Hindi

📔 : NestJS Tutorials 🔗

NestJS में exception handling एक crucial feature है जो आपको application के errors को gracefully handle करने में help करता है। जब भी कोई error या unexpected behavior occur होता है, तो आप उससे handle करने के लिए Exception Filters का use कर सकते हैं।

Exception filters आपको errors को capture करने, format करने और proper HTTP responses return करने कि facility देते हैं।

इस topic में हम step-by-step NestJS Exception Filters का concept समझेंगे, कैसे custom exception filters बनाये जाते हैं, और कैसे उन्हें application में use किया जाता है।

NestJS Exception Handling

Exception handling का मतलब है errors को catch करना और उन्हें user-friendly responses में convert करना। इससे application crash hone के बजाय gracefully respond करता है।

Web applications में जब भी कोई error occur होता है (जैसे invalid input या server issue), तो proper error handling काफी जरूरी होती है।

NestJS में Exception Filters आपको यह control देते हैं कि आप error को कैसे handle करना चाहते हैं और user को कौनसा response देना चाहते हैं।

NestJS Default Exception Handling

NestJS framework out-of-the-box error handling के साथ आता है। जब भी कोई error throw होता है, तो NestJS automatically एक HTTP response create करता है जो client को error details के साथ send होता है।

By default, यह response काफी basic होता है -

  • Status Code : 500 (Internal Server Error)

  • Error Message : Internal Server Error (या जो भी error का message हो)

throw new Error('Something went wrong!');

NestJS इसको internally handle करेगा और client को 500 status code के साथ एक response मिलेगा।

NestJS Built-in Exceptions

NestJS में कुछ built-in exceptions होती हैं जो आप directly use कर सकते हैं. यह exceptions HTTP status codes के साथ काम करती हैं।

1. NestJS HttpException

आप manually errors को handle करने के लिए HttpException throw कर सकते हैं।

import { HttpException, HttpStatus } from '@nestjs/common'; throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);

इससे response में status code 403 Forbidden और message 'Forbidden' return होगा।

2. NestJS BadRequestException

जब कोई request invalid या incorrect होती है तो BadRequestException का use किया जाता है।

import { BadRequestException } from '@nestjs/common'; throw new BadRequestException('Invalid input');

3. NestJS NotFoundException

जब कोई resource नहीं मिलता, तो आप NotFoundException throw कर सकते हैं।

import { NotFoundException } from '@nestjs/common'; throw new NotFoundException('User not found');

NestJS Create Custom Exception Filter

Custom exception filter बनाने के लिए आपको ExceptionFilter interface implement करना होता है और @Catch() decorator का use करना होता है।

चलिए एक custom exception filter बनाते हैं जो specific errors को handle करेगा और custom response भेजेगा।

Step 1 : Create Custom Exception Filter

File : src/filters/http-exception.filter.ts

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common'; import { Request, Response } from 'express'; @Catch(HttpException) // Yeh filter HttpException ko catch karega export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse<Response>(); const request = ctx.getRequest<Request>(); const status = exception.getStatus(); const exceptionResponse = exception.getResponse(); const error = typeof response === 'string' ? { message: exceptionResponse } : (exceptionResponse as object); response.status(status).json({ statusCode: status, timestamp: new Date().toISOString(), path: request.url, ...error, }); } }

इस filter में -

  • @Catch(HttpException) : यह filter सिर्फ HttpException को handle करेगा. आप multiple exceptions को भी handle कर सकते हैं।

  • catch() method : यह method exception को catch करके custom response create करता है, जो status code, timestamp, और error message के साथ client को send होता है।

NeestJS Register Exception Filter

Custom exception filters बनाने के बाद, आपको इन्हे application में register करना होता है। आप exception filters को globally या specific controllers/routes पर apply कर सकते हैं।

1. NestJS Register Global Exception Filter

अगर आपको filter को globally apply करना है, तो main.ts में register करना होता है।

File : src/main.ts

import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './filters/http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); // Global exception filter app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(3000); } bootstrap();

2. NestJS Controller-Specific Exception Filter

आप exception filter को controller level पर भी apply कर सकते हैं। इसके लिए आप controller class पर @UseFilters() decorator का use करते हैं।

File : src/user/user.controller.ts

import { Controller, Get, UseFilters } from '@nestjs/common'; import { HttpExceptionFilter } from '../filters/http-exception.filter'; @Controller('users') @UseFilters(HttpExceptionFilter) // Is controller ke liye exception filter apply export class UserController { @Get() findAll() { throw new HttpException('No users found', 404); // Custom exception throw } }

इस code में @UseFilters() decorator controller के level पर filter को apply करता है।

NestJS Complete Folder Structure

src/ │ ├── filters/ │ └── http-exception.filter.ts # Custom Exception Filter ├── user/ │ ├── user.controller.ts # User Controller with exception filter │ ├── user.module.ts # User Module ├── app.module.ts # Root Module ├── main.ts # Global Exception Filter Register

NestJS Exception Handling Best Practices

  • Use Built-in Exceptions : जहाँ possible हो, वहां built-इन exceptions का use करें (e.g., BadRequestException, NotFoundException) ताकि common HTTP errors को easily handle किया जा सके।

  • Custom Error Messages : Custom error messages देना जरूरी होता है, especially जब आपको user को friendly और readable errors दिखानी हूँ।

  • Global Exception Filters : अगर आपको application के हर route के लिए exception handling implement करना है, तो global filters का use करें. इससे repetitive code avoid होता है।

  • Logging Errors : Exceptions को handle करते वक्त उन्हें log करना अच्छी practice होती है। आप logging के लिए NestJS के in-built logger या कोई external logging service use कर सकते हैं।

Conclusion

NestJS में Exception Filters एक powerful feature हैं जो आपको application के errors को gracefully handle करने कि सुविधा देते हैं।

Exception handling को properly implement करके आप अपनी application को ज़्यादा robust, user-friendly, और maintainable बना सकते हैं।

Key Points
  • Exception Filters custom error handling के लिए काम आते हैं।

  • Built-इन exceptions जैसे BadRequestException और NotFoundException को use करके आप easily HTTP errors handle कर सकते हैं।

  • Custom exception filters आपको full control देते हैं कि errors कैसे handle और respond किये जाएँ।

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook