If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
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 किया जाता है।
●●●
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 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 होती हैं जो आप directly use कर सकते हैं. यह exceptions HTTP status codes के साथ काम करती हैं।
आप 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 होगा।
जब कोई request invalid या incorrect होती है तो BadRequestException
का use किया जाता है।
import { BadRequestException } from '@nestjs/common';
throw new BadRequestException('Invalid input');
जब कोई resource नहीं मिलता, तो आप NotFoundException
throw कर सकते हैं।
import { NotFoundException } from '@nestjs/common';
throw new NotFoundException('User not found');
●●●
Custom exception filter बनाने के लिए आपको ExceptionFilter
interface implement करना होता है और @Catch()
decorator का use करना होता है।
चलिए एक custom exception filter बनाते हैं जो specific errors को handle करेगा और custom response भेजेगा।
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 होता है।
●●●
Custom exception filters बनाने के बाद, आपको इन्हे application में register
करना होता है। आप exception filters को globally या specific controllers/routes पर apply कर सकते हैं।
अगर आपको 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();
आप 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 करता है।
●●●
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
●●●
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 कर सकते हैं।
●●●
NestJS में Exception Filters एक powerful feature हैं जो आपको application के errors को gracefully handle करने कि सुविधा देते हैं।
Exception handling को properly implement करके आप अपनी application को ज़्यादा robust, user-friendly, और maintainable बना सकते हैं।
Exception Filters custom error handling के लिए काम आते हैं।
Built-इन exceptions जैसे BadRequestException और NotFoundException को use करके आप easily HTTP errors handle कर सकते हैं।
Custom exception filters आपको full control देते हैं कि errors कैसे handle और respond किये जाएँ।