NestJS Custom Providers Explained In Hindi

📔 : NestJS Tutorials 🔗

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 बनाते हैं।

What are Providers In NestJS ?

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 के लिए।

NestJS Custom Provider Example

Custom providers को define करने के लिए हमें manually provide property का use करना पड़ता है जो बताता है कि हम किस token या class के लिए provider create कर रहे हैं। यह useClass, useValue, या useFactory का use करते हुए बनाये जाते हैं।

Custom Provider Types In NestJs
  • 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 करेगा।

Step 1 : Custom Provider Definition

File : src/providers/custom-api.provider.ts

import { Injectable } from '@nestjs/common'; @Injectable() export class CustomApiService { getData() { return 'Data from Custom API Service'; } }

Step 2 : Register Custom Provider In Module

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 कर रहे हैं।

Step 3 : Inject Provider In Controller

अब हम 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 होता है।

NestJs Value-Based Provider

Value-based providers static values को inject करते हैं जो application के different parts में reused हो सकते हैं। यह useful होते हैं जब आपको कोई fixed configuration या constant values inject करनी हो।

NestJs Value-Based Provider Example

File : src/providers/value-provider.ts

export const API_KEY = '12345-ABCDE'; // Static value define kar rahe hain
Step 2 : Register In Module

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 {}
Step 3 : Inject in Controller

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 } }

NestJS Factory Providers

Factory providers complex logic या configurations को runtime पर inject करते हैं। यह useful होते हैं , जब आपको providers को dynamically conditions के base पर create करना हो।

NestJS Factory provider example

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'; }, };
Step 2 : Register Factory Provider

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 {}
Step 3 : Inject Factory Provider

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 होता है।

Custom Providers Best Practices

  • 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 रहे।

Conclusion

NestJS में Custom Providers आपको application को dynamic और flexible बनाने कि सुविधा देते हैं।

यह providers आपको third-party services को inject करने, dynamic configurations set करने, और custom logic को encapsulate करने में help करते हैं।

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