NestJs Asynchronous providers : Configure Async Provider In NestJS In Hindi

📔 : NestJS Tutorials 🔗

NestJS में Asynchronous Providers वो providers होते हैं जो asynchronous tasks को handle करते हैं, जैसे:

  • Database connections (e.g., MongoDB, PostgreSQL, MySQL).

  • External APIs से data fetch करना।

  • Third-party libraries को asynchronously configure करना।

Asynchronous providers का main काम यह होता है कि application को initialize करते वक्त asynchronous tasks को complete करके required values को inject कर सकें।

यह useFactory का concept use करते हैं जो Promise या async logic को handle करता है।

Concept of Async Providers In NestJs

Async Providers का concept mainly factory functions पर based होता है, जहाँ हम asynchronous logic को resolve करते हैं।

NestJS में asynchronous providers को define करने के लिए हम useFactory का use करते हैं, जो asynchronous data return करता है।

NestJs Configure Async Provider

Async providers को configure करने का basic syntax कुछ इस तरह होता है -

{ provide: 'ASYNC_SERVICE', useFactory: async () => { const asyncValue = await someAsyncFunction(); return asyncValue; } }

यहां -

  • provide : यह define करता है कि provider किस token के साथ register हो रहा है।

  • useFactory : यह एक asynchronous function है जो Promise return करता है।

NestJs Async Provider Example

चलिए अब एक basic structure को समझते हैं जिसमे एक external API से data fetch करने के लिए asynchronous provider बनाया गया है।

Step 1 : Async Provider Configuration

हम एक asynchronous provider बनाएंगे जो किसी external API से data fetch करेगा और application में inject करेगा।

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

import { Injectable } from '@nestjs/common'; import axios from 'axios'; @Injectable() export class AsyncApiService { async fetchData() { const response = await axios.get('https://api.example.com/data'); return response.data; } }

यहां AsyncApiService एक service है जो asynchronous axios.get request के through external API से data fetch करता है।

Step 2 : Register Async Provider

अब हम इस asynchronous provider को useFactory के साथ register करेंगे।

File : src/app.module.ts

import { Module } from '@nestjs/common'; import { AsyncApiService } from './providers/async-api.provider'; @Module({ providers: [ { provide: 'ASYNC_API_SERVICE', useFactory: async () => { const asyncService = new AsyncApiService(); const data = await asyncService.fetchData(); return data; // Yeh data inject kiya jayega }, }, ], exports: ['ASYNC_API_SERVICE'], }) export class AppModule {}

यहां -

  • provide : ASYNC_API_SERVICE को provider token दिया गया है।

  • useFactory : यह factory asynchronous function को handle कर रहा है और API से fetched data को resolve कर रहा है।

Database connection using async provider

चलिए एक और example लेते हैं जिसमे हम एक MongoDB database connection को async provider के through inject करते हैं।

Step 1: Async Database Connection Provider

File : src/providers/database.provider.ts

import { MongoClient } from 'mongodb'; export const databaseProvider = { provide: 'DATABASE_CONNECTION', useFactory: async (): Promise<MongoClient> => { const client = new MongoClient('mongodb://localhost:27017'); await client.connect(); // Asynchronously connection open kar rahe hain return client; }, };

ऊपर example में -

  • MongoClient को asynchronously connect किया गया है।

  • Provider DATABASE_CONNECTION के साथ register हो रहा है।

Step 2 : Register Database Provider In Module

File : src/app.module.ts

import { Module } from '@nestjs/common'; import { databaseProvider } from './providers/database.provider'; @Module({ providers: [databaseProvider], exports: ['DATABASE_CONNECTION'], }) export class AppModule {}

यहां हमने database provider को app module में register किया है ताकि DATABASE_CONNECTION को inject किया जा सके।

Step 3 : Inject Database Connection Provider

File : src/app.controller.ts

import { Controller, Get, Inject } from '@nestjs/common'; import { MongoClient } from 'mongodb'; @Controller() export class AppController { constructor(@Inject('DATABASE_CONNECTION') private readonly dbClient: MongoClient) {} @Get('db-status') getDatabaseStatus() { return this.dbClient.isConnected() ? 'Database Connected' : 'Database Disconnected'; } }

यहां:

  • @Inject('DATABASE_CONNECTION') के through MongoDB client को inject किया गया है।

  • getDatabaseStatus() method database के connection status को check करता है।

Handling Dependencies In Async Providers

कभी-कभी async providers में आपको दूसरे providers कि need होती है, तो आप easily dependencies को inject कर सकते हैं।

इसका syntax कुछ इस तरह होता है -

{ provide: 'DEPENDENT_PROVIDER', useFactory: async (someService: SomeService) => { const result = await someService.getData(); return result; }, inject: [SomeService], }

इस example में -

  • inject : यह बताता है कि useFactory में SomeService को inject करना है।

  • someService.getData() को asynchronous call करके result return किया जा रहा है।

NestJs Async Providers Best Practice

  • Error Handling : Async providers में asynchronous tasks handle करते वक्त proper error handling का ध्यान रखें। जैसे try-catch का use करें ताकि errors को effectively manage किया जा सके।

  • Avoid Long Operations In Providers : Providers में heavy or long-running operations को avoid करें। अगर आपको ऐसे operations handle करने हैं, तो उन्हें अलग services में move करें और उन services को inject करें।

  • Use Dependency Injection : अगर async providers में आपको दूसरे services या providers कि need हो, तो हमेशा inject property का use करें ताकि dependencies properly manage हो सकें।

  • Testing Async Providers : जब async providers का test करते हैं, तो उन्हें easily mock या stub करें। Testing asynchronous logic में Promise को resolve करने का ध्यान रखें।

Conclusion

NestJS में Asynchronous Providers asynchronous tasks को handle करने का एक efficient तरीका है, जैसे database connections, external API requests, या third-party services को integrate करना।

इस topic में हमने समझा कि कैसे async providers काम करते हैं, कैसे उन्हें configure करते हैं, और कैसे उन्हें dependency injection के साथ use करते हैं।

Asynchronous providers को सही तरीके से implement करने से आप अपनी application को ज़्यादा flexible और scalable बना सकते हैं।

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