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 में 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 बनाता है।
●●●
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 करना।
आपको configurable services चाहिए (जैसे database configurations, external APIs).
आपको same service के multiple instances चाहिए लेकिन different configurations के साथ।
Shared modules create करने होते हैं जो multiple modules के साथ अलग-अलग settings के साथ काम कर सकें।
●●●
चलिए एक real-world example लेते हैं जिसमे हम एक EmailService
को dynamic configurations के साथ initialize करेंगे। हर environment के लिए different SMTP
settings use किये जाएंगे।
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 हो रहा है।
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 करता है।
अब हम अपने 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 किया गया है।
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 करता है।
●●●
Dynamic modules को configure करते वक्त आपके पास दो major तरीके होते हैं -
Synchronous Configuration : जिसमे आप module को statically configuration pass करते हैं।
Asynchronous Configuration : जब configuration को dynamically fetch करना हो, जैसे किसी external API या database से।
EmailModule.register({
host: 'smtp.example.com',
port: 587,
username: 'example',
password: 'password123',
});
अगर आपको 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).
●●●
Dynamic modules में आप asynchronous logic को handle करने के लिए registerAsync()
method का use कर सकते हैं। यह method आपको asynchronous providers को manage करने कि facility देता है।
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 किया गया है।
●●●
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 कर रहे हो।
●●●
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 करते हैं।