Modular System Layer তৈরি করুন TypeScript, Node.js, Express, and Mongoose দিয়ে

farhadtanveer

Mohammad Farhad Tanveer

Posted on November 26, 2024

Modular System Layer তৈরি করুন TypeScript, Node.js, Express, and Mongoose দিয়ে

পরিচিতি

মডিউলার আর্কিটেকচার একটি সফটওয়্যার ডিজাইন প্যাটার্ন, যেখানে আলাদা আলাদা ফাংশনালিটি বা ফিচার ভিন্ন ভিন্ন মডিউল আকারে তৈরি করা হয়। এই ডকুমেন্টেশনটি আপনার TypeScript, Node.js, Express, এবং Mongoose দিয়ে কীভাবে একটি মডিউলার সিস্টেম লেয়ার তৈরি করবেন তা ধাপে ধাপে ব্যাখ্যা করবে। এখানে আমরা user মডিউল তৈরি করার প্রক্রিয়া দেখাবো।


১. প্রজেক্ট সেটআপ

প্রথমে একটি নতুন প্রজেক্ট তৈরি করুন।

প্রজেক্ট ইনিশিয়ালাইজ করুন:

mkdir modular-system
cd modular-system
npm init -y

Enter fullscreen mode Exit fullscreen mode

প্রয়োজনীয় প্যাকেজ ইনস্টল করুন:

npm install express mongoose zod
npm install -D typescript @types/node @types/express ts-node-dev

Enter fullscreen mode Exit fullscreen mode

TypeScript কনফিগার করুন:

ts --init

Enter fullscreen mode Exit fullscreen mode

tsconfig.json ফাইলে নিচের পরিবর্তন করুন:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
  }
}

Enter fullscreen mode Exit fullscreen mode

২. ফোল্ডার স্ট্রাকচার

প্রজেক্টের ফোল্ডার স্ট্রাকচার তৈরি করুন:

src/
 |-- modules/
 |    |-- user/
           |-- user.interface.ts       // make an TS interface/type for specific model
 |         |-- user.model.ts           // create schema from type and then make a model 
 |         |-- user.controller.ts      // handle req/res only
 |         |-- user.service.ts         // habdle business logic or query
 |         |-- user.zod.validation.ts  // third party extension to handle validation
 |         |-- user.router.ts          // make route and connect it into userController.
 |-- app.ts
 |-- server.ts

Enter fullscreen mode Exit fullscreen mode

৩. user মডিউল তৈরি

(১) user.model.ts

এই ফাইলটি ডাটাবেস মডেল তৈরি করতে ব্যবহৃত হয়। এখানে আমরা Mongoose ব্যবহার করে একটি Schema এবং মডেল ডিফাইন করেছি, যা ডাটার স্ট্রাকচার নির্দেশ করে। এটি নিশ্চিত করে যে ডাটাবেসে সঠিক ডাটা ফরম্যাট সঞ্চয় হচ্ছে। উদাহরণস্বরূপ, user মডেলটি নাম, ইমেল, এবং পাসওয়ার্ডের মতো ফিল্ড নিয়ে গঠিত।
Mongoose ব্যবহার করে একটি মডেল তৈরি করুন।

import { Schema, model } from 'mongoose';

// we can make it into different file as name user.interface.ts 
interface IUser {
  name: string;
  email: string;
  password: string;
}
const userSchema = new Schema<IUser>({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

export const User = model<IUser>('User', userSchema);

Enter fullscreen mode Exit fullscreen mode

(২) user.service.ts

Service ফাইলের কাজ মূল ব্যবসায়িক লজিক পরিচালনা করা। এটি মূলত মডিউল এবং ডাটার মধ্যে যোগাযোগ স্থাপন করে। এই ফাইলে সাধারণত ডাটাবেস কোয়েরি এবং ডাটার ম্যানিপুলেশন সম্পর্কিত কার্যক্রম থাকে। উদাহরণস্বরূপ, user.service.ts ফাইলটি User মডেলের মাধ্যমে ডাটাবেসে নতুন ইউজার তৈরি করা এবং ইউজারদের ডাটা রিটার্ন করার কাজ করে। এটি কন্ট্রোলারের সাথে কাজ করে, যেখানে কন্ট্রোলার শুধুমাত্র HTTP রিকোয়েস্ট হ্যান্ডল করে এবং সঠিক সার্ভিস ফাংশনকে কল করে।
ব্যবসায়িক লজিক এখানে থাকবে।

import { User } from './user.model';

export const createUser = async (userData: IUser) => {
  const user = await User.create(userData);
  return user;
};

export const getUsers = async () => {
  return await User.find();
};

Enter fullscreen mode Exit fullscreen mode

(৩) user.controller.ts

Controller ফাইলের কাজ হল HTTP রিকোয়েস্ট হ্যান্ডল করা। এটি ক্লায়েন্ট থেকে আসা রিকোয়েস্ট গ্রহণ করে এবং উপযুক্ত সার্ভিস ফাংশন কল করে। সার্ভিস থেকে প্রাপ্ত ডাটা প্রক্রিয়াজাত করে এবং ক্লায়েন্টের কাছে রেসপন্স পাঠায়। উদাহরণস্বরূপ, এখানে একটি POST রিকোয়েস্ট নতুন ইউজার তৈরি করার জন্য সার্ভিসকে ডাকে এবং সার্ভিস থেকে রিটার্ন পাওয়া ডাটাকে JSON আকারে রেসপন্স করে। এছাড়া, GET রিকোয়েস্ট ব্যবহারকারীদের ডাটার তালিকা রিটার্ন করে।
HTTP রিকোয়েস্ট হ্যান্ডেল করতে ব্যবহার করুন।

import { Request, Response } from 'express';
import { createUser, getUsers } from './user.service';

export const createUserController = async (req: Request, res: Response) => {
  try {
    const user = await createUser(req.body);
    res.status(201).json(user);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

export const getUsersController = async (req: Request, res: Response) => {
  try {
    const users = await getUsers();
    res.status(200).json(users);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

Enter fullscreen mode Exit fullscreen mode

(৪) user.zod.validation.ts

Zod validation ফাইলটি ইনপুট যাচাই করার জন্য ব্যবহৃত হয়। এটি ডাটার গঠন এবং ধরণ নিশ্চিত করে, যেমন নাম, ইমেল, এবং পাসওয়ার্ডের জন্য নির্দিষ্ট শর্ত। এটি গুরুত্বপূর্ণ কারণ এটি ক্লায়েন্টের পাঠানো ভুল বা ক্ষতিকর ডাটা সার্ভারে প্রবেশ করতে বাধা দেয়। সিকিউরিটি বৃদ্ধি পায় কারণ এটি ডাটাবেসে সংরক্ষণ করার আগেই ইনপুট যাচাই করে এবং পোটেনশিয়াল বাগ বা সাইবার আক্রমণ থেকে সিস্টেমকে সুরক্ষিত রাখে। উদাহরণস্বরূপ, createUserSchema নিশ্চিত করে যে নাম খালি নয়, ইমেল সঠিক ফরম্যাটে রয়েছে, এবং পাসওয়ার্ড ন্যূনতম ৬ অক্ষরের।
ইনপুট ভ্যালিডেশন Zod দিয়ে করুন।

import { z } from 'zod';

export const createUserSchema = z.object({
  body: z.object({
    name: z.string().min(1, 'Name is required'),
    email: z.string().email('Invalid email address'),
    password: z.string().min(6, 'Password must be at least 6 characters'),
  }),
});

Enter fullscreen mode Exit fullscreen mode

(৫) user.routes.ts

রাউটার তৈরি করুন।

import express from 'express';
import { createUserController, getUsersController } from './user.controller';

const router = express.Router();

router.post('/', createUserController);
router.get('/', getUsersController);

export const UserRoutes = router;

Enter fullscreen mode Exit fullscreen mode

৪. app.ts ফাইল

app.ts ফাইলে Express অ্যাপ তৈরি করুন।

import express, { Application } from 'express';
import mongoose from 'mongoose';
import { UserRoutes } from './modules/user/user.router';

const app: Application = express();

app.use(express.json());

// Routes
app.use('/api/users', UserRoutes);

export default app;

Enter fullscreen mode Exit fullscreen mode

৫. server.ts ফাইল

সার্ভার চালু করার জন্য server.ts তৈরি করুন।

import app from './app';

const PORT = 5000;
const DATABASE_URL = 'mongodb://localhost:27017/modular_system';

app.listen(PORT, async () => {
  console.log(`Server is running on port ${PORT}`);
  try {
    await mongoose.connect(DATABASE_URL);
    console.log('Database connected');
  } catch (error) {
    console.error('Database connection failed:', error);
  }
});

Enter fullscreen mode Exit fullscreen mode

৬. প্রজেক্ট রান করুন

প্রজেক্ট চালানোর জন্য package.json-এ স্ক্রিপ্ট যোগ করুন:

"scripts": {
  "start": "ts-node-dev src/server.ts"
}

Enter fullscreen mode Exit fullscreen mode

প্রজেক্ট চালু করুন:

npm start

Enter fullscreen mode Exit fullscreen mode

উপসংহার

উপরের ধাপগুলো অনুসরণ করে, আপনি একটি মডিউলার সিস্টেম লেয়ার তৈরি করতে পারবেন। ভবিষ্যতে নতুন মডিউল তৈরি করতে হলে এই একই ধাপগুলো অনুসরণ করুন।

💖 💪 🙅 🚩
farhadtanveer
Mohammad Farhad Tanveer

Posted on November 26, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related