NestJS এর একটি মৌলিক ধারণা হল মডিউল। এটি একটি class যা @Module decorator দ্বারা annotated থাকে। Module basically NestJS application এর structure organize করতে সাহায্য করে। প্রতিটি application এ at least একটি module থাকে তা হল root module। Root মডিউলে হল NestJS application এর starting point।
@Module() decorator এর property গুলো হচ্ছে :
- providers
- controllers
- imports
- exports
Providers আর Controller নিয়ে আমরা আগেই আলোচনা করেছি। Recap এর জন্য আগের lecture দেখে আসতে পারেন।
Imports এ আমরা কিছু dependent module list import করতে পারি যা আপনার current module এ dependent।
Exports হল subset of providers যা আপনার current module এর provider এ add করা হয়েছে। Export এ আপনি যদি কোনো provider add করেন যা কিনা আপনার current module এ add করা আছে। তাহলে অন্য কোনো module যদি আপনার current module কে import এ add করে সেই module তাহলে direct exported provider এর access পাবে।
Module by default provider দের encapsulate করে ফেলে।
NestJS Module Example
ProductController এবং ProductService এর business domain একই , তাই এই product controller এবং service একই module এ রাখা হয়েছে।
import { Module } from '@nestjs/common';
import { ProductController } from './product.controller';
import { ProductService } from './product.service';
@Module({
controllers: [ProductController],
providers: [ProductService],
})
export class ProductModule {}
Module এর কিছু features
Shared modules
NestJS এ module হল singletons অর্থাৎ একটি মাত্র object create করে। তাই আপনি যদি চান তাহলে same object instance share করতে পারেন। এই জন্য আপনাকে ওই component টি exports দিতে হবে , তাহলেই আপনার instance টি share হয়ে যাবে।
@Module({
controllers: [ProductController],
providers: [ProductService],
exports: [ProductService],
})
export class ProductModule {}
Module re-exporting
অনেক সময় আমাদের কিছু module এর instance শেয়ার করতে হতে পারে। এই feature কে NestJS এর Re-export বলা হয়।
@Module({
imports: [GenericModule],
exports: [GenericModule],
})
export class SampleModule {}
Global modules
যদি কোনো module অন্যসব module এ import করতে হয় তাহলে আমাদের একই module বার বার import করতে হবে জিনিষটা খুবই বিরক্তিকর। এই কাজের জন্য আমরা @Global() decorator ব্যবহার করতে হবে।