Middleware হল একটি ফাংশন যা সার্ভারের রিকোয়েস্ট-রেসপন্স চেইনের মধ্যে অবস্থিত, এবং এটি বিভিন্ন কাজ যেমন রিকোয়েস্ট প্রক্রিয়াকরণ, অথেনটিকেশন, ভ্যালিডেশন, বা লোগিং করতে ব্যবহৃত হয়। বিশেষ করে Express.js (Node.js এর ওয়েব ফ্রেমওয়ার্ক) এ Middleware খুবই জনপ্রিয়, এবং এখানে একাধিক ধরনের middleware তৈরি এবং প্রয়োগ করা সম্ভব।
এই টিউটোরিয়ালে আমরা middleware কীভাবে কাজ করে এবং কীভাবে এটি request-handling pipeline-এ প্রয়োগ করা যায় তা একটি উদাহরণের মাধ্যমে দেখবো।
Express.js Middleware Implementation Example
Step 1: Express.js Setup
প্রথমে, Express.js ইনস্টল করা প্রয়োজন। নিচে কমান্ডটি ব্যবহার করে Express.js ইনস্টল করুন:
npm init -y
npm install expressStep 2: Basic Express Server
Express.js এর একটি বেসিক সার্ভার তৈরি করা যাক।
const express = require('express');
const app = express();
const port = 3000;
// বেসিক রুট
app.get('/', (req, res) => {
res.send('Hello, Express Middleware!');
});
// সার্ভার চালু
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});Step 3: Middleware Implementation
Express.js-এ middleware প্রাথমিকভাবে দুইভাবে কাজ করে:
- Global Middleware: এটি সার্ভারের সমস্ত রিকোয়েস্টে কাজ করবে।
- Route-specific Middleware: এটি শুধু নির্দিষ্ট রুটের রিকোয়েস্টের জন্য কাজ করবে।
1. Global Middleware (All Routes)
Global middleware হল এমন একটি middleware যা সমস্ত রিকোয়েস্টের জন্য কাজ করে। আমরা এখানে একটি লগিং middleware তৈরি করবো যা প্রতিটি রিকোয়েস্টের তথ্য কনসোলে প্রিন্ট করবে।
// Logging Middleware
app.use((req, res, next) => {
console.log(`${req.method} request made to: ${req.url}`);
next(); // Next middleware বা রুট হ্যান্ডলারের কাছে পাস করা
});এটি app.use() এর মাধ্যমে সার্ভারের সব রিকোয়েস্টের জন্য এক্সিকিউট হবে এবং প্রতিটি রিকোয়েস্টের method (GET, POST ইত্যাদি) এবং url কনসোলে প্রিন্ট করবে।
2. Route-Specific Middleware
এটি শুধুমাত্র নির্দিষ্ট রুটের জন্য কার্যকর হবে। নিচে একটি middleware উদাহরণ দেখানো হচ্ছে যা শুধু /admin রুটে কাজ করবে।
// Admin Route Middleware
const checkAdmin = (req, res, next) => {
const isAdmin = req.query.admin === 'true'; // URL এ query parameter চেক করা
if (isAdmin) {
next(); // যদি ইউজার admin হয়, পরবর্তী রাউটে যাবে
} else {
res.status(403).send('Access denied! You are not an admin.');
}
};
// /admin রুটে middleware প্রয়োগ করা
app.get('/admin', checkAdmin, (req, res) => {
res.send('Welcome Admin!');
});এখানে, /admin রুটে গেলে প্রথমে checkAdmin middleware চলবে। যদি ইউজার admin=true প্যারামিটার পাঠায়, তাহলে next() কল হবে এবং পরবর্তী রাউট হ্যান্ডলার (যেখানে "Welcome Admin!" পাঠানো হবে) এক্সিকিউট হবে। যদি ইউজার admin না হয়, তবে 403 Access Denied মেসেজ দেখানো হবে।
Step 4: Combining All Together
এখন সমস্ত middleware এবং রাউটগুলো একত্রে ব্যবহার করি:
const express = require('express');
const app = express();
const port = 3000;
// Logging Middleware (Global Middleware)
app.use((req, res, next) => {
console.log(`${req.method} request made to: ${req.url}`);
next();
});
// Admin Route Middleware (Route-Specific Middleware)
const checkAdmin = (req, res, next) => {
const isAdmin = req.query.admin === 'true';
if (isAdmin) {
next();
} else {
res.status(403).send('Access denied! You are not an admin.');
}
};
// Basic Route
app.get('/', (req, res) => {
res.send('Hello, Express Middleware!');
});
// Admin Route with Middleware
app.get('/admin', checkAdmin, (req, res) => {
res.send('Welcome Admin!');
});
// Starting the Server
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});How It Works:
- Logging Middleware:
- এই middleware সব রিকোয়েস্টে কাজ করবে এবং প্রতিটি রিকোয়েস্টের
methodএবংurlকনসোলে দেখাবে।
- এই middleware সব রিকোয়েস্টে কাজ করবে এবং প্রতিটি রিকোয়েস্টের
- Admin Route Middleware:
/adminরুটে যাবার আগে checkAdmin middleware চেক করবে যে ইউজারadmin=trueপ্যারামিটার পাঠিয়েছে কি না। যদি পাঠায়, তবে অ্যাক্সেস দেবে, নতুবা 403 Access Denied দেখাবে।
Step 5: Testing
- Test Logging Middleware:
অ্যাপ্লিকেশনটি চালু করুন এবং
/রুটে গিয়ে দেখুন কনসোলে:GET request made to: /
- Test Admin Route:
/admin?admin=trueURL ব্যবহার করলে:GET request made to: /admin?admin=trueএবং আপনি পাবেন:
Welcome Admin!/admin?admin=falseবা/adminURL ব্যবহার করলে:Access denied! You are not an admin.
Error Handling Middleware
Error handling এর জন্য একটি কাস্টম middleware ব্যবহার করা হয়। এটি সাধারণত সব শেষে থাকে এবং ত্রুটিগুলি হ্যান্ডেল করে।
// Error handling Middleware
app.use((err, req, res, next) => {
console.error(err.stack); // Tstack trace print
res.status(500).send('Something went wrong!');
});এটি ব্যবহারকারীকে 500 Internal Server Error বার্তা পাঠাবে এবং সার্ভারে ঘটে যাওয়া ত্রুটির স্ট্যাক ট্রেস কনসোলে প্রিন্ট করবে।
সারসংক্ষেপ
- Middleware একাধিক ফাংশনের মাধ্যমে আপনার রিকোয়েস্ট হ্যান্ডলিং প্রক্রিয়া নিয়ন্ত্রণ করে এবং সার্ভার সাইডে ডেটা ভ্যালিডেশন, অথেনটিকেশন, লোগিং ইত্যাদি কার্য সম্পাদন করে।
- Express.js তে global middleware এবং route-specific middleware ব্যবহার করে আপনি নির্দিষ্ট রিকোয়েস্ট প্রক্রিয়াকরণ বা ত্রুটি হ্যান্ডলিং করতে পারেন।
- কাস্টম error handling middleware আপনার অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং user-friendly করে তোলে।
Middleware ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের বিভিন্ন কার্যক্রম সহজে এবং কার্যকরভাবে পরিচালনা করতে পারেন।
Read more