মিডলওয়্যার

**মিডলওয়্যার** হল এক ধরণের কম্পিউটার সফটওয়্যার প্রোগ্রাম যা বিভিন্ন সফটওয়্যার অ্যাপ্লিকেশন পোগ্রাম তৈরিতে সাহায্য করে, যা সাধারণতঅপারেটিং সিস্টেমে থাকে না৷  এটিকে "সফটওয়্যার আঠা" হিসাবে বর্ণনা করা যেতে পারে, কারন এটি একটা অ্যাপ্লিকেশনের সাথে আরেকটাকে জোড়া দেয়। 

মিডলওয়্যার সফটওয়্যার ডেভেলপারদের সফটওয়্যারগুলোর মধ্যে যোগাযোগ ও ইনপুট/আউটপুটের কাজগুলো সহজ করে দেয় যাতে ডেভেলপাররা অন্য কাজে মনোযোগ বেশি দিতে পারে। একটি নতুন অ্যাপ্লিকেশনের পুরাতন যুগের কোড করা অ্যাপ্লিকেশনের সাথে সংযোগ করার সমাধানসরূপ মিডলওয়্যার ১৯৮০ সালের দিকে জনপ্রিয়তা পেতে শুরু করে, যদিও মিডলওয়্যার ধারণাটি ১৯৬৮ সাল থেকেই ছিলো।

## [[এক্সপ্রেস.জেএস]] এ মিডলওয়্যারের ধারণা
নোড.জেএস এর ফ্রেমওয়ার্ক এক্সপ্রেস.জেএস এ মিডলওয়্যার হলো সফটওয়্যার ডেভেলপমেন্টের একটি মৌলিক ধারণা। মিডলওয়্যারের ভালো মানের ধারণা ছাড়া এক্সপ্রেস.জেএস এ কোড লেখা সম্ভব না। এক্সপ্রেস.জেএস এ এইচটিটিপি রিকোয়েস্ট ও রেসপন্স পরিচালনার ক্ষেত্রে ডেভেলপারকে কোড চালানো, কোড পরিবর্তন করা ও কোডের প্রতিক্রিয়া পাঠানোর ক্ষেত্রে মিডলওয়্যার খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে।

### [[এক্সপ্রেস.জেএস]] এ মিডলওয়্যার কি?
এক্সপ্রেস.জেএস এ মিডলওয়্যার হলো সফটওয়্যারের বিভিন্ন উপাদান অথবা ফাংশনগুলোর মধ্যে অবস্থানকারী ক্লায়েন্ট ও সার্ভার অথবা অ্যাপ্লিকেশনের বিভিন্ন স্তর। এক্ষেত্রে এক্সপ্রেস.জেএসের প্রসঙ্গে বলতে হয় মিডলওয়্যার ফাংশন হলো সেই ফাংশন যা এইচটিটিপি(HTTP) রিকোয়েস্ট ও রেসপন্স অবজেক্ট এবং নেক্সট মিডলওয়্যার ফাংশনের রিকোয়েস্ট-রেসপন্সের মধ্যে প্রবেশাধিকার আছে।

### [[এক্সপ্রেস.জেএস]] এ বিভিন্ন প্রকারের মিডলওয়্যার

# **আগমনী রিকোয়েস্ট প্রসেসিং**
## **আগমনী রিকোয়েস্টকে প্রক্রিয়া করাঃ** `express.json()` এর মত মিডলওয়্যারকে প্রক্রিয়া করে এর মধ্যে থাকা জেসন ডাটাকে `req.body` এর জন্য সহজলব্য করে রাখা। 
## **ইউনিফর্ম রিসোর্স লোকেটর (URL) এনকোডিংঃ** `express.urlencoded()` মত মিডলওয়্যার ইউনিফর্ম রিসোর্স লোকেটর (URL) এনকোডেড ডাটাকে প্রসেস করে। 
# **অথেনটিকেশন ও অথোরাইজেশন** 
## **ব্যবহারকারী যাচাই করাঃ** মিডলওয়্যার নির্দিষ্ট রাউটে প্রবেশের অনুমতি দেওয়ার আগে একজন ব্যবহারকারী অথেনটিকেটেড কিনা তা পরীক্ষা করতে পারে।
## **রোল-অনুযায়ী প্রবেশাধিকার নিয়ন্ত্রনঃ** ব্যবহারকারী কোন নির্দিষ্ট কাজ করার আগে মিডলওয়্যার পরীক্ষার করে দেখতে পারে যে, ব্যবহারকারী ওই কাজটি করার জন্য পরীক্ষিত কিনা। 
# **লগিং এবং মনিটরিং**
## **অনুরোধ লগিংঃ** `মরগ্যানের` মত মিডলওয়্যার ডিবাগিং এবং পর্যবেক্ষণের জন্য আগত অনুরোধের বিবরণ লগ করে। 
## **কর্মক্ষমতা মনিটরিংঃ** রেসপন্স টাইম এবং রিসোর্স ব্যবহারের মতো মেট্রিক্স ট্র্যাক করে।
# **ত্রুটি মধ্যস্থতা**
## **ত্রুটি বের করাঃ** রিকোয়েস্ট প্রক্রিয়াকরণের সময় ঘটে যাওয়া ত্রুটিগুলি মধ্যস্থতা করার জন্য বিশেষায়িত মিডলওয়্যার ফাংশন কাজ করে।
## **ত্রুটির প্রতিক্রিয়াঃ** ক্লায়েন্টকে উপযুক্ত এইচটিটিপি(HTTP) স্ট্যাটাস কোড এবং ত্রুটি বার্তা পাঠায়।
# **CORS মধ্যস্থতা**
## **ক্রস-অরিজিন রিকোয়েস্ট ম্যানেজ করাঃ** CORS মতো মিডলওয়্যার বিভিন্ন ডোমেন থেকে আসা অনুরোধকে পরবর্তী প্রক্রিয়ার জন্য সহজলব্য করে বা বাধাপ্রদান করে।      
# **নিরাপত্তা বাড়ানো**
## **হেলমেটঃ** হেলমেট মিডলওয়্যার এইচটিটিপি(HTTP) হেডার সেট করে বিভিন্ন দুর্বলতা থেকে অ্যাপ্লিকেশনকে নিরাপদ রাখে।
## **রেট লিমিটিংঃ** অপব্যবহার প্রতিরোধ করার জন্য একটি নির্দিষ্ট সময়সীমার মধ্যে একটি ক্লায়েন্ট কতবার রিকোয়েস্ট করতে পারবে তা নিয়ন্ত্রণ করে।

### এক্সপ্রেস.জেএসে মিডলওয়্যার ফাংশনের মৌলিক কাঠামো
এক্সপ্রেস.জেএসে একটি মিডলওয়্যার ফাংশনের মৌলিক কাঠামোর উদাহরণ নিচে দেওয়া হলোঃ


```js
function middlewareFunction(req, res, next) {
  // Perform operations
  // ...

  // Pass control to the next middleware
  next();
}
```


এই কোডে যা ঘটছেঃ 
* req: এখানে `req` হলো একটি HTTP রিকোয়েস্ট অবজেক্ট
* res: এখানে `res` হলো একটি HTTP রেসপন্স অবজেক্ট
* next: এখানে `next` হলো একটি কলব্যাক ফাংশন যা পরবর্তী মিডলওয়্যারে কন্ট্রোল করার জন্য পাঠিয়ে দিবে।

### [[এক্সপ্রেস.জেএস]] এ মিডলওয়্যারের উদাহরন
একটি এক্সপ্রেস.জেএসে অ্যাপ্লিকেশনে মিডলওয়্যার কীভাবে কাজ করে তা দেখানোর জন্য এখানে কিছু কোডের উদাহরণ দেওয়া হলঃ


```js
const express = require('express');
const app = express();

// একটি সাধারন লগিং মিডলওয়্যার
const logMiddleware = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // Call the next middleware or route handler
};

// একটি মিডলওয়্যারের যে কিনা অথেনটিকেশন পরীক্ষা করে
const authMiddleware = (req, res, next) => {
  if (req.headers.authorization === 'valid-token') {
    next(); // Continue to the next middleware or route handler
  } else {
    res.status(403).send('Forbidden'); // End response cycle with 403 status
  }
};

app.use(logMiddleware);  // Logs every request
app.use('/protected', authMiddleware);  // Protect routes that start with /protected

// একটি রাউট নিরূপণ করা
app.get('/', (req, res) => {
  res.send('Welcome to the homepage!');
});

// একটি সুরক্ষিত রাউট নিরূপণ করা
app.get('/protected', (req, res) => {
  res.send('You have access to the protected route!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
```


## তথ্যসূত্র

বিষয়শ্রেণী:ব্যবস্থাদি প্রকৌশল