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 में 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 बनाते हैं।
●●●
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 करे।
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 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 कर सकते हैं।
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;
},
);
●●●
अब हम एक custom route decorator बनाते हैं जो current user को request से extract करेगा। यह decorator हर request के अंदर authenticated user को method के parameters में inject करेगा।
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 किया जाता है।
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 करता है।
●●●
आप custom route decorators को easily अपने controller methods में use कर सकते हैं जहाँ आपको specific request handling कि need हो।
जैसे हमने ऊपर देखा, @CurrentUser()
decorator को directly controller method के parameter पर apply किया गया।
दूसरा example है , ऐसा custom decorator जो Authorization header
को extract करे।
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
},
);
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 करता है।
●●●
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 रहे।
●●●
NestJS Custom Route Decorators आपको application के methods और parameters पर specific metadata या logic apply करने कि flexibility देते हैं।
यह आपके code को reusable, maintainable, और easy-तो-read बनाते हैं, specially कर जब आपको specific data extraction या validation कि need होती है।
Custom Route Decorators आपको methods और parameters पर dynamic data को inject करने में help करते हैं।
createParamDecorator() function का use करके आप decorators को easily customize कर सकते हैं।
Custom decorators code reuse और readability को improve करता है।