NestJS Custom route decorators In Hindi

📔 : NestJS Tutorials 🔗

NestJS में Custom Route Decorators आपको request lifecycle को customize करने कि facility देते हैं।

जहाँ built-in decorators जैसे @Get(), @Post(), और @Param() का use होता है, वहाँ custom route decorators आपको flexibility देते हैं कि आप अपने specific needs के according request handling को और ज़्यादा customizable बना सकें।

इस topic में हम देखेंगे कैसे आप custom route decorators बनाते हैं, कैसे इन्हे use करते हैं, और कैसे यह आपके application के code को clean और reusable बनाते हैं।

What are Custom Route Decorators In NestJs ?

NestJS में Custom Route Decorators आपको अपने methods और parameters पर specific metadata attach करने कि सुविधा देते हैं। यह decorators mostly parameter validation, data extraction, या custom logic execute करने के लिए बनाये जाते हैं।

For example, अगर आपको frequently किसी specific request header को access करना है, तो उसके लिए आप एक custom decorator बना सकते हैं जो header को extract करे और method को pass करे।

Why Use Custom Route Decorators ?

  • Code Reusability : अगर आपको bar-bar कुछ common logic लिखना pad रहा है (e.g., token extraction), तो custom decorators इस logic को reusable और concise बनाते हैं।

  • Simplified Parameter Handling : Custom decorators आपके methods के parameters को dynamically control करने में help करते हैं।

  • Cleaner Code : Specific logic को decorator में encapsulate करके आप controller को clean और readable रख सकते हैं।

NestJS Custom Route Decorator Structure

NestJS में custom route decorators बनाने के लिए आपको TypeScript के decorators का use करना होता है, और यह mostly metadata manipulation के लिए काम करते हैं।

Decorators को बनाते वक्त आपको request lifecycle में specific data को manipulate या extract करना होता है।

Custom decorators को बनाने के लिए -

  • @SetMetadata() का use होता है, जिससे आप custom metadata को define कर सकते हैं।

  • या फिर आप custom logic को createParamDecorator() function का use करके directly implement कर सकते हैं।

Example Structure

import { createParamDecorator, ExecutionContext } from '@nestjs/common'; export const CustomDecorator = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); // Custom logic here return request.someData; }, );

NestJS Custom Route Decorator Example

अब हम एक custom route decorator बनाते हैं जो current user को request से extract करेगा। यह decorator हर request के अंदर authenticated user को method के parameters में inject करेगा।

Step 1 : Create Custom Decorator for Current User

File : src/decorators/user.decorator.ts

import { createParamDecorator, ExecutionContext } from '@nestjs/common'; export const CurrentUser = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return request.user; // Assume user object is already attached in request by authentication middleware }, );

यहां -

  • createParamDecorator() का use किया गया है जो एक decorator create करता है।

  • Request के object से user extract करके method के parameter में inject किया जाता है।

Step 2 : Apply Custom Decorator in Controller

Fie : src/user/user.controller.ts

import { Controller, Get } from '@nestjs/common'; import { CurrentUser } from '../decorators/user.decorator'; @Controller('users') export class UserController { @Get('profile') getProfile(@CurrentUser() user: any) { return `Current logged in user is: ${user.username}`; } }

यहां @CurrentUser() custom decorator को method के parameter पर apply किया गया है जो user object को inject करता है।

Use Custom Route Decorators In Controller

आप custom route decorators को easily अपने controller methods में use कर सकते हैं जहाँ आपको specific request handling कि need हो।

जैसे हमने ऊपर देखा, @CurrentUser() decorator को directly controller method के parameter पर apply किया गया।

दूसरा example है , ऐसा custom decorator जो Authorization header को extract करे।

Step 3: Create Custom Decorator for Authorization Header

File : src/decorators/auth-header.decorator.ts

import { createParamDecorator, ExecutionContext } from '@nestjs/common'; export const AuthHeader = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return request.headers['authorization']; // Extract Authorization header }, );

Step 4 : Use This Decorator in Controller

File : src/user/user.controller.ts

import { Controller, Get } from '@nestjs/common'; import { AuthHeader } from '../decorators/auth-header.decorator'; @Controller('users') export class UserController { @Get('token') getToken(@AuthHeader() token: string) { return `Authorization token is: ${token}`; } }

इस example में @AuthHeader() custom decorator को method के parameter पर apply किया गया है, जो Authorization header को extract करता है और token parameter के through method को pass करता है।

Best Practices for Custom Route Decorators

  • Keep Decorators Simple : Decorators का main काम data को extract या modify करना होता है, Complex logic को decorators के अंदर avoid करें।

  • Encapsulate Common Logic : अगर आपका common logic bar-bar reuse हो रहा है, तो उससे एक custom decorator में encapsulate करें। जैसे @CurrentUser() decorator user को extract करता है, इससे code reuse होता है।

  • Avoid Overusing Decorators : हर चीज़ के लिए custom decorators mat बनाएं। जो काम built-in decorators से efficiently हो रहा है, उसके लिए custom decorators कि need नहीं होती।

  • Test Your Decorators : Custom decorators का सही तरीके से test करना जरूरी है, especially जब आप उन्हें sensitive data (जैसे Authorization headers) handle करने के लिए use कर रहे हैं।

  • Organize Your Decorators : Custom decorators को अलग folder में organize करें ताकि codebase clean और maintainable रहे।

Conclusion

NestJS Custom Route Decorators आपको application के methods और parameters पर specific metadata या logic apply करने कि flexibility देते हैं।

यह आपके code को reusable, maintainable, और easy-तो-read बनाते हैं, specially कर जब आपको specific data extraction या validation कि need होती है।

Key Points
  • Custom Route Decorators आपको methods और parameters पर dynamic data को inject करने में help करते हैं।

  • createParamDecorator() function का use करके आप decorators को easily customize कर सकते हैं।

  • Custom decorators code reuse और readability को improve करता है।

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