NestJS Dynamic Modules In Hindi

📔 : NestJS Tutorials 🔗

NestJS में Dynamic Modules का concept application को ज़्यादा flexible और configurable बनाने के लिए use होता है। जब आपको कुछ configurations runtime पर change करनी हो या एक ही module को अलग-अलग configurations के साथ use करना हो, तो Dynamic Modules आपको काफी flexibility provide करते हैं।

यह especially useful होते हैं जब आपको external services को dynamically configure करना होता है जैसे database connections, authentication services, या third-party APIs .

इस topic में हम Dynamic Modules का concept समझेंगे, कैसे Dynamic Modules बनाये जाते हैं, और कैसे इनका practical use आपके application को ज़्यादा modular और scalable बनाता है।

What are Dynamic Modules In NestJs ?

NestJS में Dynamic Modules का use तब होता है जब हमें एक module को runtime पर different configurations के साथ initialize करना हो।

Static modules का behavior pre-defined होता है, जबकि dynamic modules runtime पर configurations के according से customize किये जा सकते हैं।

इसका मतलब यह है कि आप अपने module को dynamically configure कर सकते हैं, जैसे अलग environments के लिए अलग settings, या एक ही service को अलग configurations के साथ multiple modules में use करना।

Use Case Of Dynamic Modules

  • आपको configurable services चाहिए (जैसे database configurations, external APIs).

  • आपको same service के multiple instances चाहिए लेकिन different configurations के साथ।

  • Shared modules create करने होते हैं जो multiple modules के साथ अलग-अलग settings के साथ काम कर सकें।

NestJs Dynamic Module Example

चलिए एक real-world example लेते हैं जिसमे हम एक EmailService को dynamic configurations के साथ initialize करेंगे। हर environment के लिए different SMTP settings use किये जाएंगे।

Step 1 : Create Email Module

File : src/email/email.module.ts

import { Module, DynamicModule } from '@nestjs/common'; import { EmailService } from './email.service'; @Module({}) export class EmailModule { static register(options: { host: string, port: number, username: string, password: string }): DynamicModule { return { module: EmailModule, providers: [ EmailService, { provide: 'EMAIL_CONFIG', useValue: options, // Options ko provider ke roop mein inject kar rahe hain }, ], exports: [EmailService], }; } }

यहां

  • EmailModule.register() method को SMTP configuration (host, port, etc.) pass किया जा रहा है।

  • यह configuration EMAIL_CONFIG के रूप में inject हो रहा है।

Step 2 : Create Email Service

File : src/email/email.service.ts

import { Inject, Injectable } from '@nestjs/common'; @Injectable() export class EmailService { constructor(@Inject('EMAIL_CONFIG') private config: any) {} sendEmail(to: string, subject: string, message: string) { console.log(`Sending email to ${to} using ${this.config.host}:${this.config.port}`); // Actual email sending logic yahan likha ja sakta hai } }

यहां

  • @Inject('EMAIL_CONFIG') के through SMTP configuration को service में inject किया गया है।

  • sendEmail() method email send करने का logic handle करता है।

Step 3 : Module को Configure करना

अब हम अपने AppModule में dynamic email module को configure करते हैं।

File : src/app.module.ts

import { Module } from '@nestjs/common'; import { EmailModule } from './email/email.module'; @Module({ imports: [ EmailModule.register({ host: 'smtp.example.com', port: 587, username: 'example', password: 'password123', }), ], }) export class AppModule {}

EmailModule.register() को specific SMTP settings के साथ initialize किया गया है।

Step 4 : Use Email Service In Controller

File : src/app.controller.ts

import { Controller, Get } from '@nestjs/common'; import { EmailService } from './email/email.service'; @Controller() export class AppController { constructor(private readonly emailService: EmailService) {} @Get('send-email') sendTestEmail() { this.emailService.sendEmail('test@example.com', 'Hello', 'This is a test email!'); return 'Email sent!'; } }

यहां sendTestEmail() method email send करने का example है जो dynamic configuration का use करता है।

NestJ Module Configuration Options

Dynamic modules को configure करते वक्त आपके पास दो major तरीके होते हैं -

  • Synchronous Configuration : जिसमे आप module को statically configuration pass करते हैं।

  • Asynchronous Configuration : जब configuration को dynamically fetch करना हो, जैसे किसी external API या database से।

Synchronous Configuration Example

EmailModule.register({ host: 'smtp.example.com', port: 587, username: 'example', password: 'password123', });
Asynchronous Configuration Example

अगर आपको configuration को dynamically fetch करना है, तो registerAsync() का use कर सकते हैं।

@Module({ imports: [ EmailModule.registerAsync({ useFactory: async () => ({ host: process.env.SMTP_HOST, port: +process.env.SMTP_PORT, username: process.env.SMTP_USER, password: process.env.SMTP_PASS, }), }), ], }) export class AppModule {}

example में registerAsync() asynchronous configuration fetch करता है (environment variables के through).

Handle Async Logic In Dynamic Modules

Dynamic modules में आप asynchronous logic को handle करने के लिए registerAsync() method का use कर सकते हैं। यह method आपको asynchronous providers को manage करने कि facility देता है।

NestJs Registering Async Dynamic Module Example

Location : src/email/email.module.ts

import { Module, DynamicModule } from '@nestjs/common'; import { EmailService } from './email.service'; @Module({}) export class EmailModule { static registerAsync(): DynamicModule { return { module: EmailModule, providers: [ EmailService, { provide: 'EMAIL_CONFIG', useFactory: async () => { // Configuration ko dynamically fetch karna const config = await someAsyncConfigService(); return config; }, }, ], exports: [EmailService], }; } }

यहां useFactory : async () => के through asynchronous configuration को handle किया गया है।

NestJs Dynamic Module Best Practice

  • Handle Asynchronous Configuration : जब आपको dynamic modules में external configurations को handle करना हो, तो registerAsync() का use करें।

  • Environment-Based Configuration : हर environment के लिए different configurations set करें (e.g., dev, prod) और environment variables का use करें।

  • Create Reusable Modules : Dynamic modules का use करके reusable modules बनाएं जो multiple configurations के साथ काम कर सकें।

  • Test Your Dynamic Modules : Dynamic modules को thoroughly test करें, especially जब आप async logic या third-party services का use कर रहे हो।

Conclusion

NestJS में Dynamic Modules का concept आपको application को flexible और scalable बनाने कि सुविधा देता है। यह modules configuration के according से dynamically customize किये जा सकते हैं, जो उन्हें complex use cases के लिए ideal बनाता है।

Asynchronous configuration का support और dynamic initialization के features आपको powerful applications build करने में 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