Error Handling Middleware তৈরি করা

KoaJS এর Error Handling এবং Logging - কোআজেএস (KoaJS) - Web Development

218

KoaJS একটি মিনিমালিস্ট ফ্রেমওয়ার্ক, যা উন্নত Error Handling ক্ষমতা প্রদান করে। KoaJS-এ error handling সাধারণত middleware এর মাধ্যমে করা হয়। KoaJS-এর মিডলওয়্যার সিস্টেমটি অ্যাসিনক্রোনাস (asynchronous) এবং Promise ভিত্তিক, যার মাধ্যমে আপনি সহজে ত্রুটি সনাক্ত ও পরিচালনা করতে পারেন।

এই টিউটোরিয়ালে, আমরা কিভাবে একটি Error Handling Middleware তৈরি করা যায়, তা দেখব যা সমস্ত রিকোয়েস্টের জন্য ত্রুটিগুলি সনাক্ত করে এবং ক্লায়েন্টে উপযুক্ত রেসপন্স পাঠায়।


KoaJS-এ Error Handling Middleware তৈরি করা

১. কেন্দ্রীয় Error Handling Middleware

KoaJS-এ একটি সাধারণ Error Handling Middleware তৈরি করার জন্য, আপনি try-catch ব্লক এবং next() এর মাধ্যমে পরবর্তী মিডলওয়্যার কল করতে পারেন। যদি কোনো ত্রুটি ঘটে, তবে আপনি তা ক্যাচ করতে পারবেন এবং রেসপন্স হিসেবে ক্লায়েন্টে পাঠাতে পারবেন।

উদাহরণ:

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

// কেন্দ্রীয় Error Handling Middleware
app.use(async (ctx, next) => {
  try {
    await next();  // পরবর্তী মিডলওয়্যার কল করা
  } catch (err) {
    // ত্রুটি হ্যান্ডলিং
    ctx.status = err.status || 500;  // স্ট্যাটাস কোড সেট করা
    ctx.body = { message: err.message };  // ত্রুটির বার্তা পাঠানো
    ctx.app.emit('error', err, ctx);  // ত্রুটি লগ করা
  }
});

// একটি রাউট তৈরি করা যা জোর করে ত্রুটি সৃষ্টি করবে
router.get('/error', (ctx) => {
  throw new Error('Something went wrong!');  // জোর করে ত্রুটি সৃষ্টি
  ctx.body = 'This will never be reached';
});

// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());

// Error Log ইভেন্ট
app.on('error', (err, ctx) => {
  console.error('Server Error:', err);  // ত্রুটি লগ
});

// অ্যাপ চালু করা
app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে:

  1. Error Handling Middleware: try-catch ব্লক ব্যবহার করে সমস্ত ত্রুটি ক্যাচ করা হচ্ছে এবং ctx.status এবং ctx.body এর মাধ্যমে ক্লায়েন্টে রেসপন্স পাঠানো হচ্ছে।
  2. ctx.app.emit('error', err, ctx): ত্রুটির লগ ইন করার জন্য KoaJS emit ইভেন্ট ব্যবহার করছে, যা লগ ফাইল বা অন্য জায়গায় ত্রুটি রেকর্ড করতে সহায়তা করবে।
  3. /error রাউট: এখানে আমরা একটি জোর করে ত্রুটি তৈরি করছি যা 500 (Internal Server Error) রেসপন্স পাঠাবে।

২. Custom Error Handling Classes

কখনও কখনও, আপনি যদি কাস্টম ত্রুটি তৈরি করতে চান, তবে আপনি Custom Error Classes ব্যবহার করতে পারেন, যাতে আপনি বিভিন্ন ধরনের ত্রুটি কাস্টমাইজ করতে পারেন এবং তাদের আলাদা স্ট্যাটাস কোড ও বার্তা পাঠাতে পারেন।

class NotFoundError extends Error {
  constructor(message) {
    super(message);
    this.name = 'NotFoundError';
    this.status = 404;  // HTTP স্ট্যাটাস কোড
  }
}

class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = 'ValidationError';
    this.status = 400;  // HTTP স্ট্যাটাস কোড
  }
}

app.use(async (ctx, next) => {
  try {
    await next();
    if (!ctx.body) {
      throw new NotFoundError('Resource not found');  // কাস্টম ত্রুটি
    }
  } catch (err) {
    ctx.status = err.status || 500;
    ctx.body = { message: err.message };
    ctx.app.emit('error', err, ctx);
  }
});

router.get('/validate', (ctx) => {
  throw new ValidationError('Invalid input data');  // কাস্টম ভ্যালিডেশন ত্রুটি
});

app.on('error', (err, ctx) => {
  console.error(`${err.name}: ${err.message}`);
});

এখানে:

  • Custom Error Classes: NotFoundError এবং ValidationError কাস্টম ত্রুটি ক্লাস তৈরি করা হয়েছে, যেখানে আপনি স্ট্যাটাস কোড এবং ত্রুটি বার্তা কাস্টমাইজ করতে পারেন।
  • /validate রাউটটিতে আমরা একটি কাস্টম ValidationError তৈরি করছি।

৩. Async/Await সহ Error Handling

KoaJS-এ async/await ব্যবহৃত হলে, try-catch ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং আরও সহজ হয়ে যায়। নিচে একটি অ্যাসিনক্রোনাস রাউটের উদাহরণ দেওয়া হল যেখানে async ফাংশন ব্যবহৃত হয়েছে:

router.get('/async', async (ctx) => {
  try {
    const result = await someAsyncOperation();
    ctx.body = result;
  } catch (err) {
    throw new Error('Async operation failed');  // অ্যাসিনক্রোনাস ত্রুটি
  }
});

এখানে, যদি someAsyncOperation() ফাংশনে কোনো ত্রুটি ঘটে, তাহলে সেই ত্রুটিটি catch ব্লকে ধরা হবে এবং Error Handling Middleware এর মাধ্যমে রেসপন্স পাঠানো হবে।


৪. Logging ত্রুটি

এছাড়া, আপনি ত্রুটি লগ করতে winston বা অন্য কোনো লগিং লাইব্রেরি ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে winston ব্যবহার করে ত্রুটির লগ করা হচ্ছে:

৪.১. Winston লগিং ইনস্টল করা

npm install winston

৪.২. Winston ব্যবহার করে ত্রুটি লগিং

const winston = require('winston');

// winston কনফিগারেশন
const logger = winston.createLogger({
  transports: [
    new winston.transports.Console({ format: winston.format.simple() }),
    new winston.transports.File({ filename: 'error.log' })
  ]
});

app.on('error', (err, ctx) => {
  logger.error(`${err.name}: ${err.message}`);  // ত্রুটি লগ
});

এখানে, আমরা winston ব্যবহার করে ত্রুটির লগ কনসোলে এবং error.log ফাইলে সেভ করছি।


সারাংশ

KoaJS-এ Error Handling Middleware তৈরি করা অত্যন্ত সহজ। আপনি try-catch ব্লক ব্যবহার করে অ্যাসিনক্রোনাস ত্রুটির সঠিকভাবে হ্যান্ডলিং করতে পারেন এবং কাস্টম ত্রুটি ক্লাস তৈরি করে আরো নির্দিষ্ট ত্রুটির জন্য স্ট্যাটাস কোড এবং বার্তা কাস্টমাইজ করতে পারেন। Logging ব্যবস্থা যোগ করে, আপনি আপনার অ্যাপ্লিকেশনের ত্রুটি মনিটর করতে পারেন এবং সমস্যা সমাধানে সহায়তা করতে পারবেন। KoaJS-এ Error Handling ব্যবস্থাটি অত্যন্ত নমনীয় এবং শক্তিশালী।

Content added By
Promotion

Are you sure to start over?

Loading...