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 में Providers एक fundamental concept हैं जो application के core logic को encapsulate
करते हैं। यह services, repositories, और third-party libraries को manage करने का काम करते हैं।
NestJS के default providers तो powerful होते ही हैं, लेकिन कभी-कभी हमें Custom Providers बनाने कि need होती है, जब हमें application के specific needs को handle करना हो।
इस topic में हम Custom Providers का detailed overview देखेंगे। हम समझेंगे कैसे custom providers बनाये जाते हैं, कैसे उनको register करते हैं, और किस तरह से यह application architecture को modular और scalable बनाते हैं।
●●●
NestJS में Providers वो classes
या values हैं जो application के business logic को handle करते हैं। यह typically services होते हैं जो controllers के साथ interact करते हैं और specific functionality provide करते हैं।
Providers को Dependency Injection
(DI) के through manage किया जाता है। यह providers automatically inject होते हैं जहाँ उनकी need होती है, और इस process को Dependency Injection कहते हैं।
NestJS में Custom Providers तब useful होते हैं जब हमें कुछ custom configurations या dynamic logic को encapsulate करना हो।
जैसे -
Third-party services को integrate करना।
Dynamic configuration का handle करना (जैसे runtime पर configurations को set करना).
Multiple implementations provide करना एक ही interface या service के लिए।
●●●
Custom providers को define करने के लिए हमें manually provide property का use करना पड़ता है जो बताता है कि हम किस token या class के लिए provider create कर रहे हैं। यह useClass
, useValue
, या useFactory
का use करते हुए बनाये जाते हैं।
Value-Based Providers : Static values को inject करने के लिए।
Class-Based Providers : Specific classes को inject करने के लिए।
Factory-Based Providers : Complex logic या configurations को handle करने के लिए।
अब चलिए एक custom provider बनाते हैं जो application में कोई third-party API service को inject
करेगा।
File : src/providers/custom-api.provider.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class CustomApiService {
getData() {
return 'Data from Custom API Service';
}
}
Custom provider को module के providers array
में register करते हैं। यहाँ हम एक value-based provider define कर रहे हैं।
File : src/app.module.ts
import { Module } from '@nestjs/common';
import { CustomApiService } from './providers/custom-api.provider';
@Module({
providers: [
{
provide: 'API_SERVICE',
useClass: CustomApiService, // Custom provider ko class-based provider ke roop mein use kar rahe hain
},
],
exports: ['API_SERVICE'],
})
export class AppModule {}
Example में -
provide
: यह token बताता है कि हम API_SERVICE
के लिए custom provider create कर रहे हैं।
useClass
: यह specify करता है कि किस class का instance inject किया जायेगा , यहां CustomApiService
को inject कर रहे हैं।
अब हम API_SERVICE
को inject करके use कर सकते हैं।
File : src/app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
@Controller()
export class AppController {
constructor(@Inject('API_SERVICE') private readonly apiService: any) {}
@Get()
getData(): string {
return this.apiService.getData(); // Custom provider ka method call kar rahe hain
}
}
यहां -
@Inject('API_SERVICE')
: हमने API_SERVICE provider को inject किया जो हमने पहले module में define किया था।
apiService.getData()
: इससे custom service का method call होता है।
●●●
Value-based providers static values को inject करते हैं जो application के different parts में reused हो सकते हैं। यह useful होते हैं जब आपको कोई fixed configuration या constant values inject करनी हो।
File : src/providers/value-provider.ts
export const API_KEY = '12345-ABCDE'; // Static value define kar rahe hain
File : src/app.module.ts
import { Module } from '@nestjs/common';
import { API_KEY } from './providers/value-provider';
@Module({
providers: [
{
provide: 'API_KEY',
useValue: API_KEY, // Static value inject ho rahi hai
},
],
exports: ['API_KEY'],
})
export class AppModule {}
File : src/app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
@Controller()
export class AppController {
constructor(@Inject('API_KEY') private readonly apiKey: string) {}
@Get('apikey')
getApiKey(): string {
return `API Key: ${this.apiKey}`; // API key ko use kar rahe hain
}
}
●●●
Factory providers complex logic या configurations को runtime
पर inject करते हैं। यह useful होते हैं , जब आपको providers को dynamically conditions के base पर create करना हो।
File : src/providers/factory-provider.ts
export const customFactoryProvider = {
provide: 'CUSTOM_FACTORY',
useFactory: () => {
const isProduction = process.env.NODE_ENV === 'production';
return isProduction ? 'Production Mode' : 'Development Mode';
},
};
File : src/app.module.ts
import { Module } from '@nestjs/common';
import { customFactoryProvider } from './providers/factory-provider';
@Module({
providers: [customFactoryProvider],
exports: ['CUSTOM_FACTORY'],
})
export class AppModule {}
File : src/app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
@Controller()
export class AppController {
constructor(@Inject('CUSTOM_FACTORY') private readonly mode: string) {}
@Get('mode')
getMode(): string {
return `App is running in: ${this.mode}`;
}
}
example में useFactory
एक dynamic value return करता है based on the environment, जो runtime पर decide होता है।
●●●
Use Appropriate Provider Types : हर provider को उसके use case के according से select करें। जैसे, अगर static value inject करनी हो तो value-based provider, और अगर complex logic हो तो factory-based provider का use करें।
Modular Structure : Custom providers को logically divide करें और उन्हें अलग-अलग modules में register करें ताकि आपका code maintainable रहे।
Avoid Global Providers : Global providers का use कम से कम करें. Specific modules के अंदर providers को inject
करना better होता है ताकि आप unnecessary memory consumption से बचा सकें।
Mock Providers For Testing : Testing के दौरान custom providers को mock या stub करें ताकि आपका code isolate और easily testable रहे।
●●●
NestJS में Custom Providers आपको application को dynamic और flexible बनाने कि सुविधा देते हैं।
यह providers आपको third-party services को inject करने, dynamic configurations set करने, और custom logic को encapsulate करने में help करते हैं।