KoaJS একটি আধুনিক এবং লঘু Node.js ফ্রেমওয়ার্ক যা মিডলওয়্যার ভিত্তিক আর্কিটেকচার ব্যবহার করে। মিডলওয়্যার (Middleware) হল একটি ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্স এর মধ্যবর্তী প্রক্রিয়াকে নিয়ন্ত্রণ করে। KoaJS-এ, মিডলওয়্যার হল এমন একটি ফাংশন যা রিকোয়েস্ট আসার পর এবং রেসপন্স পাঠানোর আগে বিভিন্ন ধরনের কার্যক্রম পরিচালনা করে।
KoaJS-এ মিডলওয়্যার অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি সমস্ত রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া নিয়ন্ত্রণ করে এবং ডেভেলপারদের অনেক ধরনের ফিচার যেমন লগিং, অথেন্টিকেশন, রাউটিং, ত্রুটি হ্যান্ডলিং ইত্যাদি সহজে একত্রিত করতে দেয়।
Middleware কী?
মিডলওয়্যার এমন একটি ফাংশন যা KoaJS অ্যাপ্লিকেশনে বিভিন্ন ধরনের কাজ করার জন্য ব্যবহৃত হয়। এই ফাংশনটি দুটি প্রধান কাজ করে:
- রিকোয়েস্ট হ্যান্ডলিং: এটি রিকোয়েস্টে কিছু পরিবর্তন করে বা কিছু কার্যক্রম চালায়, যেমন রিকোয়েস্ট বডি প্যার্স করা বা ইউজারের অথেন্টিকেশন চেক করা।
- রেসপন্স হ্যান্ডলিং: এটি রেসপন্সে কিছু পরিবর্তন করে বা কিছু কাজ করে, যেমন কাস্টম রেসপন্স তৈরি করা বা রেসপন্স স্ট্যাটাস কোড সেট করা।
KoaJS Middleware এর স্ট্রাকচার
KoaJS-এ প্রতিটি মিডলওয়্যার একটি অ্যাসিনক্রোনাস (Asynchronous) ফাংশন হয়, যা ctx (context) এবং next প্যারামিটার গ্রহণ করে। ctx একটি অবজেক্ট যা রিকোয়েস্ট এবং রেসপন্সের সমস্ত তথ্য ধারণ করে, এবং next হলো একটি ফাংশন যা পরবর্তী মিডলওয়্যারটি চালায়।
মিডলওয়্যার এর স্ট্রাকচার:
async function myMiddleware(ctx, next) {
// রিকোয়েস্ট প্রক্রিয়াকরণ
console.log('Request received');
// পরবর্তী মিডলওয়্যার চালানো
await next();
// রেসপন্স প্রক্রিয়াকরণ
console.log('Response sent');
}
await next(): এটি পরবর্তী মিডলওয়্যারটি চালাতে সহায়তা করে এবং এরপর রেসপন্স প্রক্রিয়া শুরু হয়।ctx: এটি একটি অবজেক্ট যা রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত সমস্ত তথ্য ধারণ করে, যেমন রিকোয়েস্ট পাথ, কুকি, হেডার, বডি ইত্যাদি।
KoaJS-এ Middleware কিভাবে কাজ করে?
KoaJS-এর মিডলওয়্যার চেইন আর্কিটেকচার অনুসরণ করে, যেখানে একাধিক মিডলওয়্যার একের পর এক চালানো হয়। প্রতিটি মিডলওয়্যার কার্যকর হওয়ার পর next() কল করে পরবর্তী মিডলওয়্যারকে চালাতে বলা হয়।
উদাহরণ:
const Koa = require('koa');
const app = new Koa();
// একটি সাধারণ মিডলওয়্যার
app.use(async (ctx, next) => {
console.log('Middleware 1: Request received');
await next(); // পরবর্তী মিডলওয়্যার চালানোর জন্য
console.log('Middleware 1: Response sent');
});
// আরেকটি মিডলওয়্যার
app.use(async (ctx, next) => {
console.log('Middleware 2: Request received');
await next(); // পরবর্তী মিডলওয়্যার চালানোর জন্য
console.log('Middleware 2: Response sent');
});
// রেসপন্স তৈরি করা
app.use(ctx => {
ctx.body = 'Hello from KoaJS!';
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে, next() ফাংশনটি প্রতিটি মিডলওয়্যারকে চেইনে রেখে কাজ করার সুযোগ দেয়। রিকোয়েস্ট প্রসেসিং চলাকালীন প্রতিটি মিডলওয়্যার কার্যকর হয় এবং এরপর রেসপন্স প্রস্তুত করা হয়।
আউটপুট:
Middleware 1: Request received
Middleware 2: Request received
Middleware 2: Response sent
Middleware 1: Response sent
এখানে, প্রথমে Middleware 1 এবং Middleware 2 কাজ করে এবং পরে রেসপন্স তৈরি করা হয়।
Middleware এর বিভিন্ন ধরনের ব্যবহার
অথেন্টিকেশন এবং অথরাইজেশন: মিডলওয়্যার ব্যবহার করে ইউজারের অথেন্টিকেশন চেক করা যেতে পারে, যেমন JWT টোকেন যাচাই করা।
app.use(async (ctx, next) => { const token = ctx.headers['authorization']; if (!token) { ctx.status = 401; ctx.body = 'Unauthorized'; return; } // JWT টোকেন যাচাই await next(); });লগিং: মিডলওয়্যার ব্যবহার করে রিকোয়েস্টের লগ তৈরি করা যেতে পারে। যেমন, রিকোয়েস্টের URL, HTTP মেথড, ইত্যাদি লগ করা।
app.use(async (ctx, next) => { console.log(`${ctx.method} ${ctx.url}`); await next(); });ত্রুটি হ্যান্ডলিং: KoaJS-এ এক্সপ্লিসিট ত্রুটি হ্যান্ডলিং মিডলওয়্যার ব্যবহার করা যেতে পারে, যা অ্যাপ্লিকেশনের ত্রুটি পরিচালনা করে।
app.use(async (ctx, next) => { try { await next(); } catch (err) { ctx.status = err.status || 500; ctx.body = { message: err.message }; } });কাস্টম রাউটিং: মিডলওয়্যার ব্যবহার করে কাস্টম রাউটিং ব্যবস্থা তৈরি করা যেতে পারে।
app.use(async (ctx, next) => { if (ctx.url === '/about') { ctx.body = 'About Page'; } else { await next(); } });
সারাংশ
KoaJS-এ মিডলওয়্যার হল অ্যাপ্লিকেশনের মূল অংশ, যা রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী কাজগুলি পরিচালনা করে। মিডলওয়্যার প্রতিটি রিকোয়েস্টের উপর কাজ করতে পারে, যেমন অথেন্টিকেশন, লগিং, রাউটিং, ত্রুটি হ্যান্ডলিং, এবং আরও অনেক কিছু। KoaJS-এর মিডলওয়্যার চেইন আর্কিটেকচার ব্যবহার করে, একাধিক মিডলওয়্যার একে অপরের সাথে কাজ করে এবং next() ফাংশন ব্যবহার করে পরবর্তী মিডলওয়্যারকে চালানো হয়। এটি ডেভেলপারদের জন্য একটি নমনীয় এবং কাস্টমাইজযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করার সুযোগ প্রদান করে।
Read more