KoaJS একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা Node.js-এ অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। ত্রুটি পরিচালনা (Error Handling) একটি গুরুত্বপূর্ণ দিক, এবং KoaJS এ কাস্টম ত্রুটি পেজ এবং ত্রুটি রেসপন্স তৈরি করা খুবই সহজ। KoaJS-এ আপনি মিডলওয়্যার ব্যবহার করে ত্রুটি হ্যান্ডলিং এবং কাস্টম ত্রুটি পেজ তৈরি করতে পারেন।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS-এ কাস্টম ত্রুটি পেজ এবং কাস্টম ত্রুটি রেসপন্স তৈরি করা যায়।
১. KoaJS ত্রুটি হ্যান্ডলিং মিডলওয়্যার তৈরি করা
KoaJS-এ Error Handling সাধারণত try-catch ব্লক এবং মিডলওয়্যার ব্যবহার করে করা হয়। আমরা একটি কাস্টম Error Handling মিডলওয়্যার তৈরি করব যা সমস্ত ত্রুটি ক্যাচ করবে এবং রেসপন্স হিসেবে তা কাস্টম পেজ বা JSON রেসপন্স পাঠাবে।
১.১. কাস্টম Error Handling মিডলওয়্যার
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
// কাস্টম ত্রুটি হ্যান্ডলিং মিডলওয়্যার
app.use(async (ctx, next) => {
try {
await next(); // পরবর্তী মিডলওয়্যার কল করা
} catch (err) {
// ত্রুটি হ্যান্ডলিং
ctx.status = err.status || 500; // যদি ত্রুটি না থাকে তবে 500 (Internal Server Error)
ctx.body = { message: err.message }; // ত্রুটির বার্তা
ctx.app.emit('error', err, ctx); // লগিং এবং অন্যান্য কাজ
}
});
// একটি রাউট তৈরি করা যা ত্রুটি ঘটাবে
router.get('/error', async (ctx) => {
throw new Error('Something went wrong!'); // এখানে কৃত্রিমভাবে ত্রুটি তৈরি করা হয়েছে
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// Error লগ ইভেন্ট
app.on('error', (err, ctx) => {
console.error('Server Error:', err);
});
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
- আমরা একটি কাস্টম Error Handling Middleware তৈরি করেছি যা সমস্ত ত্রুটি ধরবে।
- যদি কোনো ত্রুটি ঘটে, তাহলে
ctx.statusএবংctx.bodyএর মাধ্যমে ত্রুটি রেসপন্স পাঠানো হবে।
২. Custom Error Pages তৈরি করা
KoaJS-এ কাস্টম ত্রুটি পেজ তৈরি করার জন্য, আপনি কাস্টম HTML পেজ তৈরি করতে পারেন এবং ত্রুটির জন্য সেই পেজ প্রদর্শন করতে পারেন। উদাহরণস্বরূপ, যখন একটি 404 বা 500 ত্রুটি ঘটে, তখন একটি কাস্টম HTML পেজ রেন্ডার করা হবে।
২.১. 404 Error Page তৈরি করা
const fs = require('fs');
const path = require('path');
// কাস্টম 404 পেজ তৈরি করা
router.get('*', async (ctx) => {
ctx.status = 404;
ctx.type = 'html';
ctx.body = fs.createReadStream(path.join(__dirname, '404.html')); // 404.html ফাইলটি ব্যবহার করা হবে
});
এখানে, সমস্ত রাউটের জন্য * ওয়াইল্ডকার্ড ব্যবহার করা হয়েছে যা 404 এর জন্য কাস্টম পেজ রেন্ডার করবে।
404.html (এটি আপনার প্রকল্পের মূল ফোল্ডারে থাকতে হবে):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 - Page Not Found</title>
</head>
<body>
<h1>Oops! Page Not Found</h1>
<p>The page you are looking for might have been removed or temporarily unavailable.</p>
</body>
</html>
এখানে, 404 ত্রুটি ঘটলে একটি কাস্টম HTML পেজ রেন্ডার করা হবে যা ব্যবহারকারীকে উপযুক্ত ত্রুটির বার্তা দেখাবে।
২.২. 500 Error Page তৈরি করা
500 ত্রুটি (Server Error) হ্যান্ডল করার জন্য আমরা কাস্টম 500 পেজও তৈরি করতে পারি:
router.get('*', async (ctx) => {
ctx.status = 500;
ctx.type = 'html';
ctx.body = fs.createReadStream(path.join(__dirname, '500.html')); // 500.html ফাইলটি ব্যবহার করা হবে
});
500.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>500 - Internal Server Error</title>
</head>
<body>
<h1>Something went wrong!</h1>
<p>We are currently experiencing technical difficulties. Please try again later.</p>
</body>
</html>
এখানে, 500 ত্রুটি ঘটলে একটি কাস্টম HTML পেজ রেন্ডার করা হবে, যা ব্যবহারকারীকে সার্ভার ত্রুটির বিষয়ে জানাবে।
৩. Error Responses in JSON Format
কাস্টম ত্রুটি রেসপন্স JSON ফরম্যাটে প্রদান করতে চাইলে আপনি এইভাবে কোড পরিবর্তন করতে পারেন:
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
ctx.status = err.status || 500;
ctx.body = {
error: {
message: err.message,
code: ctx.status
}
};
ctx.app.emit('error', err, ctx);
}
});
এখানে, যদি কোনো ত্রুটি ঘটে, তাহলে JSON রেসপন্স পাঠানো হবে, যার মধ্যে message এবং code থাকবে।
৪. Custom Error Handling for Specific Routes
আপনি যদি কিছু নির্দিষ্ট রাউটে কাস্টম ত্রুটি হ্যান্ডলিং করতে চান, তবে আপনি সেগুলির জন্য আলাদা মিডলওয়্যার ব্যবহার করতে পারেন।
৪.১. Specific Route Error Handling
router.get('/admin', async (ctx, next) => {
// কিছু কাজ যা ত্রুটি সৃষ্টি করতে পারে
if (!ctx.state.user || ctx.state.user.role !== 'admin') {
const err = new Error('Unauthorized Access');
err.status = 403;
throw err; // ত্রুটি ছুঁড়তে হবে
}
ctx.body = 'Admin dashboard';
});
এখানে, /admin রাউটের জন্য একটি কাস্টম ত্রুটি ছুড়েছি, যদি ব্যবহারকারী admin রোলের না হয়, তাহলে 403 Forbidden ত্রুটি পাঠানো হবে।
সারাংশ
KoaJS-এ কাস্টম Error Handling, Error Pages, এবং Error Responses তৈরি করা সহজ। আপনি কাস্টম ত্রুটি পেজ এবং JSON রেসপন্স তৈরি করতে পারেন, যা ব্যবহারকারীদের উপযুক্ত বার্তা প্রদান করবে। KoaJS এর Error Handling Middleware এবং Custom Error Pages ব্যবহার করে আপনি অ্যাপ্লিকেশনের ত্রুটি দ্রুত চিহ্নিত এবং সঠিকভাবে পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশনের রিলায়েবিলিটি এবং ইউজার এক্সপেরিয়েন্স উন্নত করতে সাহায্য করে।
Read more