ExpressJS এ Middleware একটি গুরুত্বপূর্ণ কনসেপ্ট, যা অ্যাপ্লিকেশনে বিভিন্ন ধরনের রিকোয়েস্ট এবং রেসপন্স প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Middleware হল এমন ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্স অবজেক্টের মধ্যে মধ্যবর্তী প্রক্রিয়ায় কাজ করে। ExpressJS এ দুটি প্রধান ধরনের Middleware আছে: Application Level Middleware এবং Router Level Middleware। নিচে এদের মধ্যে পার্থক্য এবং ব্যবহার ব্যাখ্যা করা হলো।
১. Application Level Middleware
Application Level Middleware হল সেই Middleware যা পুরো Express অ্যাপ্লিকেশন জুড়ে ব্যবহৃত হয়। এটি Express অ্যাপ্লিকেশনের মধ্যে সাধারণভাবে সমস্ত রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়ার জন্য ব্যবহৃত হয়।
১.১. Application Level Middleware কিভাবে কাজ করে?
Express অ্যাপ্লিকেশনে, Application Level Middleware ব্যবহার করতে app.use() অথবা app.METHOD() ফাংশন ব্যবহার করা হয়। এখানে METHOD হল HTTP পদ্ধতি যেমন GET, POST, PUT, DELETE, ইত্যাদি। app.use() দিয়ে সাধারণত সমস্ত HTTP রিকোয়েস্টের জন্য Middleware ব্যবহার করা হয়।
১.২. উদাহরণ
const express = require('express');
const app = express();
// Application level middleware
app.use((req, res, next) => {
console.log('Time:', Date.now());
next(); // মেক্সিনাম এক্সিকিউশনের জন্য পরবর্তী middleware ফাংশন চালু হবে
});
// একটি রুট তৈরি করা
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
এখানে, app.use() Middleware সবার জন্য প্রযোজ্য। যেকোনো রিকোয়েস্ট আসলেই এই Middleware ফাংশনটি প্রথমে কাজ করবে এবং পরে পরবর্তী রাউট ফাংশনে যাবে।
১.৩. সাধারণ ব্যবহারের উদাহরণ
- লগিং: প্রতিটি রিকোয়েস্টের লগ রাখা
- অথেন্টিকেশন: ইউজারের অথেন্টিকেশন চেক করা
- স্ট্যাটিক ফাইল সার্ভ করা
- CORS হ্যান্ডলিং
২. Router Level Middleware
Router Level Middleware হল এমন Middleware যা শুধুমাত্র নির্দিষ্ট রাউট বা রাউট গ্রুপের জন্য ব্যবহৃত হয়। এটি express.Router() ব্যবহার করে তৈরি করা হয় এবং শুধুমাত্র সেই রাউট বা রাউট গ্রুপের জন্য প্রযোজ্য হয়, যেখানে Middlewareটি ডিফাইন করা হয়েছে।
২.১. Router Level Middleware কিভাবে কাজ করে?
ExpressJS এ router.use() ফাংশন ব্যবহার করে Router Level Middleware ব্যবহার করা হয়। এই Middleware কেবলমাত্র সেই রাউটগুলির জন্য কার্যকর হবে যেগুলিতে তা যোগ করা হয়েছে।
২.২. উদাহরণ
const express = require('express');
const app = express();
const router = express.Router();
// Router level middleware
router.use((req, res, next) => {
console.log('Router level middleware for /api');
next();
});
// এই রাউটটি /api/ path-এ শুধু কাজ করবে
router.get('/data', (req, res) => {
res.send('Data from /api');
});
// মূল অ্যাপ্লিকেশনে রাউটটি যুক্ত করা
app.use('/api', router);
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
এখানে, router.use() Middleware শুধুমাত্র /api রাউটের জন্য প্রযোজ্য। app.use('/api', router) ব্যবহার করে, আমরা /api পাথের রাউটগুলোকে Router Level Middleware এর আওতায় এনেছি।
২.৩. সাধারণ ব্যবহারের উদাহরণ
- API সেকশনগুলোতে বিশেষ কিছু Middleware প্রয়োগ করা
- ইউজার বা প্রশাসক ভিন্ন ভিন্ন রাউটের জন্য Middleware প্রয়োগ করা
৩. Middleware এর পার্থক্য: Application Level এবং Router Level
| Feature | Application Level Middleware | Router Level Middleware |
|---|---|---|
| Scope | পুরো অ্যাপ্লিকেশন জুড়ে প্রযোজ্য | নির্দিষ্ট রাউট বা রাউট গ্রুপের জন্য প্রযোজ্য |
| ব্যবহার | app.use() বা app.METHOD() দিয়ে ব্যবহৃত হয় | router.use() দিয়ে ব্যবহৃত হয় |
| ব্যবহারের উদ্দেশ্য | সাধারণত সার্বিক কাজ যেমন লগিং, অথেন্টিকেশন ইত্যাদি | নির্দিষ্ট API বা রাউট গ্রুপের জন্য Middleware প্রয়োগ করা |
| এফেক্ট | সমস্ত রিকোয়েস্টের জন্য কাজ করে | শুধুমাত্র নির্দিষ্ট রাউটের জন্য কাজ করে |
৪. Middleware স্ট্যাক
ExpressJS Middleware এর একটি স্ট্যাক তৈরি করে, যেখানে Middleware ফাংশনগুলো পরপর কার্যকর হয়। এই স্ট্যাকটি নির্ধারণ করে কোন Middleware আগে চলবে এবং কোনটি পরে চলবে। next() ফাংশনটি Middleware চেইনে পরবর্তী ফাংশনকে কল করতে ব্যবহৃত হয়।
সারাংশ
- Application Level Middleware: এটি পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত হয় এবং সাধারণত লগিং, অথেন্টিকেশন, CORS হ্যান্ডলিং, ইত্যাদি কাজের জন্য ব্যবহৃত হয়।
- Router Level Middleware: এটি শুধু নির্দিষ্ট রাউট বা রাউট গ্রুপে প্রযোজ্য হয় এবং বিশেষ API গুলি পরিচালনা করার জন্য ব্যবহৃত হয়।
- Middleware ব্যবহার করার মাধ্যমে, আপনি একটি অ্যাপ্লিকেশনের বিভিন্ন রিকোয়েস্ট প্রসেসিং-এর জন্য আরও ফ্লেক্সিবল এবং কাস্টমাইজড সমাধান তৈরি করতে পারেন।
Read more