No Installation Required ⚡

Node.js ইন্সটল করার সাথে সাথেই আপনি কিছু সুপার-পাওয়ার পেয়ে যান। এগুলোকে বলা হয় Core Modules। এগুলো ব্যবহারের জন্য npm install করার প্রয়োজন হয় না।

৩.১ fs (File System): Managing Data 📁

ফাইল সিস্টেম মডিউল আপনাকে হার্ডড্রাইভের সাথে কথা বলার সুযোগ দেয়। এটি মূলত দুটি মোডে কাজ করে: Synchronous (Blocking) এবং Asynchronous (Non-blocking)

📖 Advanced File Handling (Promises): আধুনিক Node.js-এ আমরা কলব্যাক-এর বদলে fs/promises ব্যবহার করি যা কোডকে আরও ক্লিন করে।

const fs = require('fs').promises;

async function manageFiles() {
    try {
        // ১. ফাইল লিখা
        await fs.writeFile('note.txt', 'Learning Node.js core modules!');
        console.log("File created successfully.");

        // ২. ফাইল পড়া
        const data = await fs.readFile('note.txt', 'utf-8');
        console.log("Content:", data);

        // ৩. ফাইল রিনেম করা
        await fs.rename('note.txt', 'renamed_note.txt');
    } catch(err) {
        console.error("Error occurred:", err);
    }
}

manageFiles();
          

⚠️ Senior Tip: প্রডাকশন সার্ভারে ভুলেও readFileSync ব্যবহার করবেন না, কারণ এটি পুরো সার্ভারকে আটকে (Freeze) রাখে যতক্ষণ ফাইল পড়া শেষ না হয়।

৩.২ path: Cross-Platform Navigator 🧭

উইন্ডোজে পাথ আলাদা হয় (\), লিনাক্সে আলাদা (/)। এই ঝামেলা মেটাতেই path মডিউল।

const path = require('path');

const filePath = '/user/shagor/documents/secret.txt';

console.log({
    base: path.basename(filePath), // secret.txt
    dir: path.dirname(filePath),   // /user/shagor/documents
    ext: path.extname(filePath),   // .txt
    absolute: path.isAbsolute(filePath) // true
});

// সবচেয়ে বেশি ব্যবহৃত হয়: path.join()
const customPath = path.join(__dirname, 'views', 'index.html');
console.log("Cross-platform safe path:", customPath);
          

৩.৩ os (Operating System): System Insights 🖥️

সার্ভার কতটুকু র‍্যাম ব্যবহার করছে বা প্রসেসর কেমন—তা জানতে এটি ব্যবহৃত হয়।

const os = require('os');

const systemInfo = {
    platform: os.platform(),
    uptime: `${(os.uptime() / 3600).toFixed(2)} hours`,
    totalRAM: `${(os.totalmem() / 1024 / 1024 / 1024).toFixed(2)} GB`,
    freeRAM: `${(os.freemem() / 1024 / 1024 / 1024).toFixed(2)} GB`,
    cpuCount: os.cpus().length
};

console.table(systemInfo);
          

৩.৪ http: Building Your Own Server 🌐

এক্সপ্রেস জেএস-এর ভেতরে আসলে এই http মডিউলটিই কাজ করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে কমিউনিকেশন তৈরি করে।

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.url === '/') {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('<h1>Welcome to Zarratin Server!</h1>');
    } else if (req.url === '/api') {
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ status: "Success", data: "You accessed the API" }));
    } else {
        res.writeHead(404);
        res.end('404 Not Found');
    }
});

server.listen(5000, () => console.log("Server listening on port 5000"));
          

৩.৫ events: The Nervous System of Node.js ⚡

Node.js এর অধিকাংশ ফিচার এই ইভেন্ট সিস্টেমের উপর ভিত্তি করে চলে। আপনি নিজের কাস্টম ইভেন্ট তৈরি করে অ্যাপ্লিকেশনের এক অংশ থেকে অন্য অংশে সিগন্যাল পাঠাতে পারেন।

const EventEmitter = require('events');
const orderEmitter = new EventEmitter();

// ১. ইভেন্ট লিসেনার সেট করা
orderEmitter.on('order-placed', (orderId, price) => {
    console.log(`Email Sent: Order #${orderId} for $${price} is confirmed.`);
});

orderEmitter.on('order-placed', () => {
    console.log("Stock Inventory Updated.");
});

// ২. ইভেন্ট ট্রিগার করা (যখন ইউজার অর্ডার দেয়)
orderEmitter.emit('order-placed', 101, 500);
          

🎯 Output:

Email Sent: Order #101 for $500 is confirmed.
Stock Inventory Updated.

💡 Interview Q&A (Chapter 3)

প্রশ্ন ১: path.join() এবং path.resolve() এর মধ্যে মূল পার্থক্য কী?

উত্তর: path.join() শুধু পাথের সেগমেন্টগুলোকে জোড়া লাগায়। আর path.resolve() সবসময় একটি Absolute Path (root থেকে শুরু হওয়া পাথ) রিটার্ন করে। এটি অনেকটা টার্মিনালে cd কমান্ড দেওয়ার মতো কাজ করে।

প্রশ্ন ২: Node.js এ Stream এবং Buffer এর গুরুত্ব কী? (fs মডিউল প্রসঙ্গে)

উত্তর: যখন আমরা বিশাল কোনো ফাইল (যেমন: ৪ জিবি মুভি) রিড করি, তখন পুরোটা র‍্যামে না নিয়ে ছোট ছোট টুকরো করে প্রসেস করাকে Stream বলে। আর সেই ছোট ছোট ডেটা প্যাকেটের টেম্পোরারি স্টোরেজকে Buffer বলে। এটি মেমোরি ম্যানেজমেন্টের জন্য দারুণ।

প্রশ্ন ৩: Event Loop-এ events মডিউল কীভাবে কাজ করে?

উত্তর: EventEmitter অবজেক্ট যখন কোনো ইভেন্ট emit করে, তখন সেই ইভেন্টের সাথে যুক্ত সব লিসেনার ফাংশনগুলোকে ইভেন্ট লুপের পরবর্তী সারিতে (Queue) যুক্ত করা হয় এবং সিনক্রোনাসলি এক্সিকিউট করা হয়।

প্রশ্ন ৪: fs.watch() কেন ব্যবহৃত হয়?

উত্তর: কোনো নির্দিষ্ট ফাইল বা ডিরেক্টরিতে কোনো পরিবর্তন (যেমন: ফাইল এডিট বা নতুন ফাইল অ্যাড) হচ্ছে কিনা তা রিয়েল-টাইমে মনিটর করার জন্য এটি ব্যবহৃত হয়।

🎯 অধ্যায় ৩ এর সারাংশ (Summary)

  • fs (File System): ফাইল তৈরি, পড়া, আপডেট, ডিলিট — সবকিছু। প্রোডাকশনে async/await ব্যবহার করুন
  • path: ক্রস-প্ল্যাটফর্ম পাথ ম্যানেজমেন্ট। path.join() সবচেয়ে বেশি ব্যবহৃত
  • os: সার্ভারের RAM, CPU, আপটাইম মনিটর করার জন্য
  • http: নিজের সার্ভার তৈরি করার বেসিক বিল্ডিং ব্লক
  • events: Node.js-এর নার্ভাস সিস্টেম — কাস্টম ইভেন্ট তৈরি করে অ্যাপ্লিকেশনকে মডুলার করে তোলে

📖 পরবর্তী অধ্যায় (Chapter 4):

আমরা শিখবো Module System — কীভাবে নিজের কোডকে ছোট ছোট মডিউলে ভাগ করে প্রফেশনাল প্রজেক্ট স্ট্রাকচার 📁 তৈরি করতে হয়! প্রস্তুত তো? 🚀

🔒 কপিরাইট সুরক্ষিত কন্টেন্ট 🔒

কপি, স্ক্রিনশট, প্রিন্ট করা সম্পূর্ণ নিষিদ্ধ।