KoaJS একটি আধুনিক এবং শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা Node.js-এর উপর তৈরি। KoaJS-এ Context (ctx) অবজেক্ট একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং এটি রিকোয়েস্ট (request) এবং রেসপন্স (response) সম্পর্কিত সব তথ্য ধারণ করে। ctx ব্যবহার করে ডেভেলপাররা রিকোয়েস্ট এবং রেসপন্সের ডেটা সহজভাবে অ্যাক্সেস করতে পারে এবং তার উপর অপারেশন করতে পারে।
Context (ctx) কী?
KoaJS-এ Context (ctx) একটি বিশেষ অবজেক্ট যা রিকোয়েস্ট (request) এবং রেসপন্স (response) এর মধ্যে যোগাযোগের মাধ্যম হিসেবে কাজ করে। এটি একটি একক অবজেক্ট হিসাবে রিকোয়েস্ট এবং রেসপন্সের সমস্ত তথ্য ধারণ করে, যেমন:
- রিকোয়েস্ট ডেটা (Request Data): রিকোয়েস্টের পাথ, কুকি, হেডার, শরীর (body) ইত্যাদি।
- রেসপন্স ডেটা (Response Data): রেসপন্স স্ট্যাটাস, হেডার, কন্টেন্ট ইত্যাদি।
এটি কোডকে আরও পরিষ্কার, সহজ এবং কার্যকরী করে তোলে, কারণ ডেভেলপারদের আলাদা করে রিকোয়েস্ট এবং রেসপন্স হ্যান্ডল করতে হয় না।
Context (ctx) এর কাজ কিভাবে করে?
KoaJS-এ ctx বা কনটেক্সট অবজেক্ট প্রতিটি মিডলওয়্যার ফাংশনে স্বয়ংক্রিয়ভাবে পাস হয়। প্রতিটি মিডলওয়্যার কেবল ctx অবজেক্টে কাজ করে এবং এটি পরবর্তী মিডলওয়্যারে পাস করে। যখন KoaJS একটি রিকোয়েস্ট প্রক্রিয়া করে, তখন এটি একটি নতুন ctx অবজেক্ট তৈরি করে এবং তারপর এই অবজেক্টটি তার মধ্যকার বিভিন্ন মিডলওয়্যারের মাধ্যমে পাস হয়।
এটি সাধারণত async/await প্যাটার্ন ব্যবহার করে কাজ করে, যেখানে ctx অবজেক্টকে বিভিন্ন মিডলওয়্যার দ্বারা রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়ায় পরিবর্তন করা হয়।
Context (ctx) এর মধ্যে গুরুত্বপূর্ণ বৈশিষ্ট্য
KoaJS এর ctx অবজেক্টে বিভিন্ন প্রোপার্টি থাকে, যা রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়:
১. ctx.request
এই অবজেক্টে রিকোয়েস্ট সম্পর্কিত তথ্য থাকে, যেমন:
ctx.request.path: রিকোয়েস্টের পাথ (URL)।ctx.request.query: URL থেকে পাওয়া কুয়েরি প্যারামিটার।ctx.request.body: রিকোয়েস্টের বডি ডেটা (যেমন POST বা PUT রিকোয়েস্টের ডেটা)।ctx.request.headers: রিকোয়েস্টের হেডার তথ্য।
২. ctx.response
এই অবজেক্টে রেসপন্স সম্পর্কিত তথ্য থাকে, যেমন:
ctx.response.body: রেসপন্সের বডি ডেটা।ctx.response.status: রেসপন্স স্ট্যাটাস কোড (যেমন 200, 404, 500 ইত্যাদি)।ctx.response.headers: রেসপন্স হেডার।
৩. ctx.state
এটি একটি খালি অবজেক্ট, যা ডেভেলপারদের ব্যক্তিগত ডেটা সংরক্ষণ করতে সহায়তা করে। এটি সাধারনত শেয়ারড স্টেট ম্যানেজমেন্ট বা সেশন তথ্য সংরক্ষণের জন্য ব্যবহৃত হয়।
ctx ব্যবহার করার উদাহরণ
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
// রিকোয়েস্ট পাথ এক্সেস
console.log(ctx.request.path);
// রেসপন্স সেট করা
ctx.response.status = 200;
ctx.response.body = 'Hello, World!';
// মিডলওয়্যার চেইনে পরবর্তী ফাংশনে যাওয়া
await next();
});
app.listen(3000);
এই উদাহরণে, যখন একটি রিকোয়েস্ট আসবে, KoaJS প্রথমে ctx অবজেক্ট তৈরি করবে, যা রিকোয়েস্ট পাথ এবং অন্যান্য তথ্য ধারণ করবে। এরপর এটি ctx.response.body এবং ctx.response.status সেট করে একটি রেসপন্স পাঠাবে।
ctx এর মাধ্যমে অ্যাসিনক্রোনাস কাজ
KoaJS সম্পূর্ণরূপে অ্যাসিনক্রোনাস (asynchronous) ফ্রেমওয়ার্ক হওয়ায়, প্রতিটি মিডলওয়্যার এবং রিকোয়েস্ট প্রক্রিয়া অ্যাসিনক্রোনাসভাবে ঘটে। async/await ব্যবহার করে ctx এর মাধ্যমে রিকোয়েস্ট এবং রেসপন্সের সমস্ত অ্যাসিনক্রোনাস কার্যক্রম সহজভাবে পরিচালনা করা যায়।
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
// কিছু অ্যাসিনক্রোনাস কাজ করা
await new Promise(resolve => setTimeout(resolve, 1000)); // এক সেকেন্ড অপেক্ষা
ctx.body = 'Request processed after 1 second';
await next();
});
app.listen(3000);
এখানে await ব্যবহার করা হয়েছে যাতে রিকোয়েস্টের প্রক্রিয়া অ্যাসিনক্রোনাসভাবে চলতে পারে এবং সিস্টেমের পারফরম্যান্স আরও উন্নত হয়।
সারাংশ
KoaJS-এ ctx বা কনটেক্সট অবজেক্ট একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত সমস্ত তথ্য ধারণ করে। এটি ডেভেলপারদের জন্য কোড লেখা সহজ এবং পরিষ্কার করে তোলে, কারণ এটি রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিংকে একত্রিত করে। ctx অবজেক্টের মাধ্যমে অ্যাসিনক্রোনাস কোডিং, মিডলওয়্যার ব্যবস্থাপনা এবং কাস্টম ফিচার যুক্ত করা আরও সুবিধাজনক হয়।
Read more