Node.js Runtime and Architecture: Complete Beginner Guide

Learn Node.js Runtime and Architecture, including Event Loop, HTTP, Callbacks, Promises, Async/Await, CommonJS, ES Modules, npm, and package.json with

1. What is Node.js?

Node.js হলো একটি JavaScript Runtime Environment, যার মাধ্যমে Browser-এর বাইরে JavaScript Code Run করা যায়। সাধারণত JavaScript Browser-এ চলে, কিন্তু Node.js ব্যবহার করে আমরা Server-side Application, Backend API এবং Command-line Tools তৈরি করতে পারি।

Node.js Google Chrome-এর V8 JavaScript Engine ব্যবহার করে JavaScript Code Execute করে। এটি Open-source এবং Cross-platform।

Example:

console.log("Hello from Node.js!");

Terminal-এ Run করো:

node app.js

Output:

Hello from Node.js!

2. How the Web Works: Client, Server and HTTP

আমরা যখন কোনো Website Open করি, তখন Client এবং Server-এর মধ্যে Data আদান-প্রদান হয়।

  • Client: যে Device বা Browser থেকে Website Access করা হয়।
  • Server: যেখানে Website-এর Application এবং Data থাকে।
  • HTTP: Client এবং Server-এর মধ্যে Communication করার Protocol।

Request and Response Cycle

যখন আমরা Browser-এ কোনো Website-এর URL লিখি, তখন Browser Server-এর কাছে একটি HTTP Request পাঠায়। Server Request Process করে এবং একটি HTTP Response পাঠায়। এরপর Browser সেই Response অনুযায়ী Website Display করে।

Client (Browser)
      |
      | HTTP Request
      v
Server
      |
      | Process Request
      v
HTTP Response
      |
      v
Client (Browser)

Example:

GET /users HTTP/1.1
Host: example.com

Server Response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "name": "Arif",
  "age": 25
}

3. Understanding the Node.js Runtime

Node.js Runtime হলো এমন একটি Environment, যেখানে Browser ছাড়াই JavaScript Code Execute করা যায়।

Node.js-এর গুরুত্বপূর্ণ Components:

  • V8 Engine: JavaScript Code Execute করে।
  • Event Loop: Asynchronous Operations পরিচালনা করতে সাহায্য করে।
  • libuv: Asynchronous I/O এবং Event Loop-এর বিভিন্ন কাজ পরিচালনা করে।
  • Node.js APIs: File System, HTTP, Path এবং অন্যান্য Built-in Features প্রদান করে।

এই Components-এর মাধ্যমে Node.js Server-side Application তৈরি করতে সাহায্য করে।

4. Event Loop and Non-blocking Architecture

Node.js-এর অন্যতম গুরুত্বপূর্ণ Feature হলো Event Loop এবং Non-blocking Architecture।

Node.js সাধারণত JavaScript Code একটি Main Thread-এ Execute করে। কোনো I/O Operation যেমন File Read বা Network Request শুরু হলে Node.js অপেক্ষা না করে অন্য কাজ চালিয়ে যেতে পারে। Operation Complete হলে তার Callback বা সংশ্লিষ্ট Handler Event Loop-এর মাধ্যমে Execute হয়।

Example:

console.log("Start");

setTimeout(() => {
    console.log("Timer Finished");
}, 2000);

console.log("End");

Output:

Start
End
Timer Finished

এখানে setTimeout()-এর জন্য JavaScript Execution থেমে থাকে না। তাই End আগে Print হয়।

5. Synchronous vs Asynchronous Programming

JavaScript-এ কাজ করার দুটি গুরুত্বপূর্ণ পদ্ধতি হলো Synchronous এবং Asynchronous Programming।

Synchronous: একটির কাজ শেষ হওয়ার পর পরবর্তী কাজ শুরু হয়। অর্থাৎ Code ধারাবাহিকভাবে Execute হয়।

Asynchronous: কোনো কাজ সম্পন্ন হওয়ার জন্য অপেক্ষা না করে অন্য কাজ চালিয়ে যাওয়া যায়।

Synchronous Example

console.log("First");
console.log("Second");
console.log("Third");

Output:

First
Second
Third

Asynchronous Example

console.log("First");

setTimeout(() => {
    console.log("Second");
}, 1000);

console.log("Third");

Output:

First
Third
Second

6. Callbacks and Callback Hell

Callback হলো এমন একটি Function, যেটি অন্য একটি Function-এর Argument হিসেবে Pass করা হয় এবং নির্দিষ্ট সময়ে Execute করা হয়।

Example:

function greet(name, callback) {
    console.log("Hello " + name);
    callback();
}

function message() {
    console.log("Welcome to Node.js");
}

greet("Arif", message);

Output:

Hello Arif
Welcome to Node.js

What is Callback Hell?

যখন একাধিক Asynchronous Callback-এর মধ্যে অনেকগুলো Nested Callback তৈরি হয়, তখন Code জটিল এবং পড়তে অসুবিধা হয়। একে Callback Hell বলা হয়।

Example:

setTimeout(() => {
    console.log("First Task");

    setTimeout(() => {
        console.log("Second Task");

        setTimeout(() => {
            console.log("Third Task");
        }, 1000);

    }, 1000);

}, 1000);

এই ধরনের Nested Structure Code Maintain করা কঠিন করে তোলে। Promise এবং Async/Await ব্যবহার করে এই সমস্যা অনেকটাই কমানো যায়।

7. Promises in JavaScript

Promise হলো JavaScript-এর একটি Object, যা কোনো Asynchronous Operation-এর ভবিষ্যতের Result অথবা Error Represent করে।

Promise-এর তিনটি State রয়েছে:

  • Pending: Operation এখনো Complete হয়নি।
  • Fulfilled: Operation সফলভাবে Complete হয়েছে।
  • Rejected: Operation ব্যর্থ হয়েছে।

Example:

const myPromise = new Promise((resolve, reject) => {
    const success = true;

    if (success) {
        resolve("Task Completed");
    } else {
        reject("Something went wrong");
    }
});

myPromise
    .then(result => console.log(result))
    .catch(error => console.log(error));

Output:

Task Completed

এখানে resolve() সফল Result প্রদান করে এবং reject() Error নির্দেশ করে। .then() দিয়ে Successful Result এবং .catch() দিয়ে Error Handle করা হয়।

8. Async/Await and Error Handling

async এবং await ব্যবহার করে Asynchronous Code আরও সহজ ও Readable করা যায়।

  • async: কোনো Function-কে Async Function হিসেবে Define করে এবং সেটি সবসময় Promise Return করে।
  • await: কোনো Promise Settle হওয়া পর্যন্ত সেই Async Function-এর Execution Pause করে।

Example:

function getData() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve("Data Loaded Successfully");
        }, 1000);
    });
}

async function main() {
    const result = await getData();
    console.log(result);
}

main();

Error Handling with try...catch

Async/Await ব্যবহার করার সময় কোনো Error হলে সেটি Handle করার জন্য try...catch ব্যবহার করা হয়।

async function getUser() {
    try {
        const response = await fetch(
            "https://jsonplaceholder.typicode.com/users/1"
        );

        if (!response.ok) {
            throw new Error("Failed to fetch user");
        }

        const data = await response.json();
        console.log(data);

    } catch (error) {
        console.log("Error:", error.message);
    }
}

getUser();

এখানে try Block-এর মধ্যে Asynchronous Operation করা হয়েছে এবং কোনো Error হলে catch Block সেটি Handle করবে।

9. CommonJS vs ES Modules

Node.js-এ Code বিভিন্ন File-এ ভাগ করে ব্যবহার করার জন্য Module System রয়েছে। CommonJS এবং ES Modules হলো JavaScript-এর দুটি Module System।

CommonJS

CommonJS-এ require() দিয়ে Module Import এবং module.exports দিয়ে Export করা হয়।

Export:

// math.js

function add(a, b) {
    return a + b;
}

module.exports = add;

Import:

// app.js

const add = require("./math");

console.log(add(10, 20));

ES Modules (ESM)

ES Modules-এ import এবং export ব্যবহার করা হয়।

Export:

// math.js

export function add(a, b) {
    return a + b;
}

Import:

// app.js

import { add } from "./math.js";

console.log(add(10, 20));
CommonJSES Modules
require()import
module.exportsexport
Traditional Node.js Module SystemStandard JavaScript Module System

Node.js-এ ES Modules ব্যবহার করতে সাধারণত package.json-এ "type": "module" যোগ করা হয় অথবা .mjs Extension ব্যবহার করা হয়।

10. npm Ecosystem and Package Management

npm-এর পূর্ণরূপ হলো Node Package Manager। এটি Node.js-এর জনপ্রিয় Package Management System। npm ব্যবহার করে আমরা বিভিন্ন Library এবং Package Install, Update ও Manage করতে পারি।

Check npm version:

npm -v

Initialize a project:

npm init -y

Install a package:

npm install express

Install a development dependency:

npm install -D nodemon

Remove a package:

npm uninstall express

11. package.json and Dependencies

package.json হলো Node.js Project-এর একটি গুরুত্বপূর্ণ Configuration File। এখানে Project-এর Name, Version, Scripts এবং Dependencies-এর Information থাকে।

Example:

{
  "name": "my-node-project",
  "version": "1.0.0",
  "description": "Learning Node.js",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "dependencies": {
    "express": "^5.0.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0"
  }
}

Dependencies vs DevDependencies

Dependencies: Application Run করার জন্য যেসব Package প্রয়োজন হয়, সেগুলো এখানে থাকে। যেমন: Express এবং Mongoose।

DevDependencies: Development এবং Testing-এর সময় প্রয়োজন হয়, কিন্তু Production Application Run করার জন্য সাধারণত প্রয়োজন হয় না। যেমন: Nodemon এবং ESLint।

What are npm Scripts?

package.json-এর scripts Section-এ আমরা বিভিন্ন Command সংরক্ষণ করতে পারি।

{
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  }
}

Run the scripts:

npm start
npm run dev

Conclusion

Node.js হলো JavaScript-এর একটি গুরুত্বপূর্ণ Runtime Environment, যা ব্যবহার করে আমরা Backend Application এবং Server তৈরি করতে পারি। এর Event Loop, Non-blocking Architecture, Callback, Promise এবং Async/Await Asynchronous Programming সহজ করে তোলে।

অন্যদিকে, CommonJS ও ES Modules Code Organize করতে এবং npm Project-এর Packages Manage করতে সাহায্য করে। Node.js ভালোভাবে শিখতে হলে এই বিষয়গুলো পরিষ্কারভাবে বোঝা জরুরি। কারণ এগুলোই পরবর্তী সময়ে Express.js, Database এবং Backend Development শেখার মূল ভিত্তি তৈরি করবে।

About the author

Daud
Hey! I'm Daud, Currently Working in IT Company BD. I always like to learn something new and teach others.

Post a Comment

To avoid SPAM, all comments will be moderated before being displayed.
Don't share any personal or sensitive information.