ExpressJS-এ middleware হল একটি ফাংশন বা কোড যা HTTP রিকোয়েস্ট এবং রেসপন্স এর মধ্যে প্রক্রিয়া করতে ব্যবহৃত হয়। Middleware ব্যবহারের মাধ্যমে আপনি রিকোয়েস্ট এবং রেসপন্স অবজেক্টে ম্যানিপুলেশন, লগিং, অথেন্টিকেশন, অথবা অন্যান্য কার্যক্রম করতে পারেন।
Middleware কি?
Middleware একটি ফাংশন যা Express অ্যাপ্লিকেশন চালানোর সময় রিকোয়েস্ট এবং রেসপন্স এর সাথে কাজ করে। এই ফাংশনটি সাধারণত request-response cycle এর মধ্যে ব্যবহৃত হয়। ExpressJS-এ middleware একাধিক কাজ করতে পারে, যেমন:
- রিকোয়েস্ট বা রেসপন্স হ্যান্ডল করা
- অথেন্টিকেশন যাচাই করা
- কুকি বা হেডার সেট করা
- রিকোয়েস্ট লগ করা
- ত্রুটি পরিচালনা করা
ExpressJS একটি স্ট্যাক হিসেবে কাজ করে যেখানে একাধিক middleware একে একে কল করা হয়, এবং এটি প্রক্রিয়া শেষ না হওয়া পর্যন্ত রিকোয়েস্ট এবং রেসপন্স অবজেক্টকে ট্রান্সফর্ম করতে থাকে।
Middleware কিভাবে কাজ করে?
ExpressJS-এ middleware একটি ফাংশন হিসেবে কাজ করে যা দুইটি মূল উপাদান নিয়ে থাকে:
- req (request): রিকোয়েস্ট অবজেক্ট, যা ক্লায়েন্ট থেকে সার্ভারে পাঠানো হয়।
- res (response): রেসপন্স অবজেক্ট, যা সার্ভার থেকে ক্লায়েন্টকে পাঠানো হয়।
এছাড়া, middleware একটি next ফাংশনও গ্রহণ করে যা পরবর্তী middleware বা রাউট হ্যান্ডলারে রিকোয়েস্টটি পাঠাতে সাহায্য করে।
Middleware ফাংশনের সাধারণ কাঠামো:
function middleware(req, res, next) {
// কিছু কোড
next(); // পরবর্তী middleware বা রাউট হ্যান্ডলারে চলে যাবে
}
Middleware এর কাজের স্টেপ:
- রিকোয়েস্ট আসার পর প্রথম middleware কোডটি রান করবে।
- যদি এই middleware ত্রুটি না ঘটায় এবং
next()কল করা হয়, তাহলে এটি পরবর্তী middleware বা রাউট হ্যান্ডলারে যাবে। - একাধিক middleware একে একে এক্সিকিউট হবে যতক্ষণ না রিকোয়েস্ট সম্পন্ন হয়।
Middleware এর ধরন
ExpressJS-এ middleware মূলত তিন ধরনের হতে পারে:
১. Application-level Middleware
এটি অ্যাপ্লিকেশন স্তরের middleware, যা সার্ভারের সকল রিকোয়েস্টের জন্য একাধিক রাউট বা পাথ এর উপর কাজ করতে পারে। সাধারণত app.use() বা app.METHOD() এর মাধ্যমে অ্যাপ্লিকেশন লেভেলে middleware ব্যবহার করা হয়।
উদাহরণ:
const express = require('express');
const app = express();
// অ্যাপ্লিকেশন লেভেল middleware
app.use((req, res, next) => {
console.log('একটি রিকোয়েস্ট এসেছে!');
next(); // পরবর্তী middleware বা রাউট হ্যান্ডলার
});
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
২. Router-level Middleware
এই ধরনের middleware শুধুমাত্র একটি নির্দিষ্ট রাউটের জন্য কার্যকরী হয়। এটি express.Router() ব্যবহার করে রাউট লেভেল middleware তৈরি করা হয়।
উদাহরণ:
const express = require('express');
const app = express();
const router = express.Router();
// রাউট লেভেল middleware
router.use((req, res, next) => {
console.log('রাউট প্রক্রিয়া শুরু হয়েছে!');
next();
});
router.get('/', (req, res) => {
res.send('This is the Home Page');
});
app.use('/home', router); // এই রাউটের জন্য middleware কার্যকরী হবে
app.listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
৩. Error-handling Middleware
এটি এমন middleware যা ত্রুটি পরিচালনা করে। যদি কোনো error ঘটে, এটি next(err) কল করে এবং ExpressJS ত্রুটি হ্যান্ডলিং middleware এ চলে যায়।
উদাহরণ:
const express = require('express');
const app = express();
// সাধারণ middleware
app.use((req, res, next) => {
throw new Error('Something went wrong!');
next();
});
// ত্রুটি হ্যান্ডলিং middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
});
app.listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
Middleware এর ব্যবহার
১. Logging
যেকোনো HTTP রিকোয়েস্টের লগ রাখা middleware দিয়ে করা যায়। এটি ডিবাগিং এবং মনিটরিং এর জন্য খুবই গুরুত্বপূর্ণ।
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
২. Authentication
ব্যবহারকারীর অথেন্টিকেশন যাচাই করার জন্য middleware ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি লগিন সিস্টেমে ব্যবহারকারী যদি লগড ইন না থাকে, তাহলে তাকে নির্দিষ্ট রাউটে প্রবেশ করতে দেওয়া হয় না।
function isAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
app.get('/dashboard', isAuthenticated, (req, res) => {
res.send('Welcome to your dashboard');
});
৩. Static File Serving
ExpressJS express.static() মিডলওয়্যার ব্যবহার করে স্ট্যাটিক ফাইল সরবরাহ করতে পারে। এর মাধ্যমে CSS, JS, এবং ইমেজ ফাইলগুলো সহজেই সার্ভ করা যায়।
app.use(express.static('public'));
সারাংশ
ExpressJS-এ middleware হল এমন ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্স এর মধ্যে ব্যবহৃত হয়। এটি বিভিন্ন কাজ যেমন রিকোয়েস্টের লগিং, অথেন্টিকেশন, এবং ত্রুটি হ্যান্ডলিং করার জন্য ব্যবহৃত হয়। ExpressJS middleware সাধারণত অ্যাপ্লিকেশন, রাউট, এবং ত্রুটি হ্যান্ডলিং স্তরে বিভক্ত হয়। Middleware ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী, নিরাপদ এবং পরিচালনাযোগ্য করতে পারেন।
Read more