KoaJS একটি মিনিমালিস্ট এবং কাস্টমাইজযোগ্য ওয়েব ফ্রেমওয়ার্ক, যা Node.js-এ তৈরি। KoaJS-এ context object বা ctx একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান। এটি রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত সমস্ত তথ্য ধারণ করে এবং অ্যাপ্লিকেশনের মধ্যে ডেটা আদান-প্রদানকে সহজ করে তোলে। ctx অবজেক্টের মাধ্যমে আপনি রিকোয়েস্টের তথ্য সংগ্রহ করতে পারেন এবং রেসপন্স সেট করতে পারেন। এটি KoaJS-এর মিডলওয়্যার সিস্টেমের কেন্দ্রবিন্দু, যা প্রতিটি রিকোয়েস্টের জন্য তৈরি হয় এবং পরবর্তী মিডলওয়্যারগুলোর মাধ্যমে ব্যবহার করা হয়।
Context Object (ctx) এর প্রধান ভূমিকা
১. রিকোয়েস্ট তথ্য ধারণ
ctx অবজেক্টে সমস্ত রিকোয়েস্ট সম্পর্কিত তথ্য থাকে, যেমন রিকোয়েস্ট পাথ, কুয়েরি প্যারামিটার, হেডার, কুকি, বডি ইত্যাদি। এর মাধ্যমে আপনি সহজেই রিকোয়েস্টের প্রয়োজনীয় তথ্য অ্যাক্সেস করতে পারবেন।
- রিকোয়েস্ট পাথ:
ctx.path - রিকোয়েস্ট মেথড (GET, POST, etc.):
ctx.method - কুয়েরি প্যারামিটার:
ctx.query - পথ প্যারামিটার:
ctx.params - রিকোয়েস্ট বডি:
ctx.request.body
উদাহরণ:
app.use(async (ctx, next) => {
console.log(ctx.method); // GET, POST, ইত্যাদি
console.log(ctx.path); // /home, /about, ইত্যাদি
console.log(ctx.query); // কুয়েরি প্যারামিটার
await next();
});
২. রেসপন্স তথ্য ধারণ
ctx অবজেক্টের মাধ্যমে আপনি রেসপন্সের জন্য ডেটা সেট করতে পারেন। যেমন, আপনি রেসপন্সের বডি, হেডার, স্ট্যাটাস কোড ইত্যাদি কাস্টমাইজ করতে পারবেন।
- রেসপন্স বডি:
ctx.body - রেসপন্স স্ট্যাটাস কোড:
ctx.status - রেসপন্স হেডার:
ctx.set()
উদাহরণ:
app.use(async (ctx, next) => {
ctx.status = 200; // রেসপন্স স্ট্যাটাস কোড
ctx.body = { message: "Success" }; // রেসপন্স বডি
ctx.set('Content-Type', 'application/json'); // রেসপন্স হেডার
await next();
});
৩. কুকি ব্যবস্থাপনা
ctx অবজেক্টের মাধ্যমে আপনি কুকি সেট এবং রিড করতে পারেন। এটি বিশেষভাবে সেশন বা ইউজার ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।
- কুকি সেট করা:
ctx.cookies.set() - কুকি রিড করা:
ctx.cookies.get()
উদাহরণ:
app.use(async (ctx, next) => {
ctx.cookies.set('user', 'john_doe'); // কুকি সেট করা
const user = ctx.cookies.get('user'); // কুকি রিড করা
console.log(user); // john_doe
await next();
});
৪. মিডলওয়্যার পারস্পরিক যোগাযোগ
KoaJS-এ, ctx অবজেক্টটি প্রতিটি মিডলওয়্যারে শেয়ার করা হয়। তাই, আপনি এক মিডলওয়্যার থেকে অন্য মিডলওয়্যারে ডেটা পাস করতে পারেন। এটি অ্যাপ্লিকেশনটির ফ্লো কন্ট্রোলকে সহজ এবং পরিষ্কার করে।
app.use(async (ctx, next) => {
ctx.state.user = 'john_doe'; // মিডলওয়্যার থেকে ডেটা সেট করা
await next();
});
app.use(async (ctx) => {
console.log(ctx.state.user); // মিডলওয়্যার থেকে ডেটা রিড করা
});
৫. রেসপন্স টাইম এবং লগিং
ctx অবজেক্ট ব্যবহার করে আপনি রেসপন্সের সময় ট্র্যাক করতে পারেন বা লগ করতে পারেন। এটি ডিবাগিং এবং পারফরম্যান্স মনিটরিংয়ের জন্য সহায়ক।
app.use(async (ctx, next) => {
const start = Date.now(); // রেসপন্স শুরু হওয়ার সময়
await next();
const ms = Date.now() - start; // রেসপন্সের সময়
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); // লগিং
});
ctx এর অন্যান্য সুবিধা
স্বয়ংক্রিয় ত্রুটি পরিচালনা:
ctxঅবজেক্টে ত্রুটি ক্যাচ করা এবং তাকে রেসপন্স হিসেবে পাঠানো সহজ।app.use(async (ctx, next) => { try { await next(); } catch (err) { ctx.status = 500; ctx.body = { error: 'Something went wrong!' }; } });- অথেন্টিকেশন এবং অথরাইজেশন:
ctxঅবজেক্ট ব্যবহার করে ইউজারের অথেন্টিকেশন চেক করা এবং সেশন বা টোকেন যাচাই করা সম্ভব।
সারাংশ
KoaJS-এ context object বা ctx অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত সমস্ত তথ্য ধারণ করে এবং মিডলওয়্যার সিস্টেমের মধ্যে ডেটা আদান-প্রদান সহজ করে তোলে। ctx অবজেক্টের মাধ্যমে আপনি রিকোয়েস্টের তথ্য যেমন পাথ, কুয়েরি প্যারামিটার, রেসপন্সের বডি এবং হেডার, কুকি এবং আরও অনেক কিছু নিয়ন্ত্রণ করতে পারেন। এটি KoaJS অ্যাপ্লিকেশনের পারফরম্যান্স এবং কার্যকারিতা বৃদ্ধি করে, এবং কোডিংয়ের সময় ডেভেলপারদের আরও ফ্লেক্সিবিলিটি এবং নিয়ন্ত্রণ প্রদান করে।
Read more