ExpressJS এ Error Handling Middleware তৈরি করা

Error Handling এবং Debugging - এক্সপ্রেসজেএস (ExpressJS) - Web Development

247

ExpressJS-এ Error Handling Middleware ব্যবহার করা গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনের যেকোনো জায়গায় ত্রুটি বা ভুল (error) শনাক্ত করতে এবং সেগুলোর সঠিক প্রতিক্রিয়া (response) দিতে সাহায্য করে। এটি অ্যাপ্লিকেশনের স্থিতিশীলতা এবং ইউজার এক্সপিরিয়েন্স উন্নত করে, কারণ ত্রুটি ঘটলেও ব্যবহারকারীকে সঠিকভাবে তথ্য প্রদর্শিত হয়।

ExpressJS-এ ত্রুটি পরিচালনার জন্য একটি বিশেষ ধরণের middleware ফাংশন ব্যবহার করা হয়, যা ত্রুটি শনাক্ত এবং সেগুলো প্রক্রিয়া করে।


১. Error Handling Middleware কী?

ExpressJS-এ সাধারণভাবে যেকোনো middleware একটি রিকোয়েস্ট এবং রেসপন্স অবজেক্ট গ্রহণ করে, তবে Error Handling Middleware-এ চারটি প্যারামিটার থাকে:

  1. err: ত্রুটি বা ভুল অবজেক্ট।
  2. req: রিকোয়েস্ট অবজেক্ট।
  3. res: রেসপন্স অবজেক্ট।
  4. next: পরবর্তী middleware ফাংশনে প্রবাহিত করতে ব্যবহৃত ফাংশন।

এই middleware শুধু ত্রুটি পরিচালনার জন্য ব্যবহৃত হয় এবং এটি সাধারণত অ্যাপ্লিকেশনের শেষে রাখা হয়।


২. ExpressJS Error Handling Middleware তৈরি করা

২.১. সাধারণ Error Handling Middleware উদাহরণ

const express = require('express');
const app = express();
const port = 3000;

// Dummy route for testing error
app.get('/', (req, res) => {
  throw new Error('Something went wrong!');
});

// Error Handling Middleware
app.use((err, req, res, next) => {
  console.error(err.stack); // ত্রুটির বিস্তারিত লগ
  res.status(500).json({
    message: 'Internal Server Error',
    error: err.message
  });
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে:

  • / রাউটে একটি কৃত্রিম ত্রুটি (throw new Error) সৃষ্টি করা হয়েছে।
  • Error Handling Middleware ত্রুটির লগ প্রদর্শন করে এবং একটি 500 (Internal Server Error) স্ট্যাটাস সহ ত্রুটির বার্তা রেসপন্স হিসেবে প্রদান করে।

২.২. ত্রুটি পরিচালনার জন্য কাস্টম মেসেজ

আপনি আপনার অ্যাপ্লিকেশনে আরও নির্দিষ্ট ত্রুটি বার্তা প্রদান করতে পারেন। নিচের উদাহরণটি দেখুন:

const express = require('express');
const app = express();
const port = 3000;

// Dummy route for testing error
app.get('/test', (req, res) => {
  throw new Error('Data not found!');
});

// Error Handling Middleware with Custom Error Message
app.use((err, req, res, next) => {
  console.error(err.stack); // ত্রুটির বিস্তারিত লগ
  if (err.message === 'Data not found!') {
    res.status(404).json({
      message: 'The requested data could not be found.',
      error: err.message
    });
  } else {
    res.status(500).json({
      message: 'Internal Server Error',
      error: err.message
    });
  }
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে:

  • /test রাউটে একটি কাস্টম ত্রুটি ঘটানো হয়েছে।
  • Error Handling Middleware ত্রুটির ধরন অনুযায়ী কাস্টম বার্তা প্রদান করছে। যদি ত্রুটি "Data not found!" হয়, তবে 404 স্ট্যাটাস কোডসহ উপযুক্ত বার্তা দেওয়া হচ্ছে।

৩. Async Functions এবং Error Handling

ExpressJS-এ asynchronous (যেমন: ডাটাবেস কল, API রিকোয়েস্ট) ফাংশনগুলো ব্যবহৃত হলে, তাতে ত্রুটি ঘটলে সেগুলি সঠিকভাবে হ্যান্ডেল করা প্রয়োজন। এজন্য async/await ব্যবহার করা হয় এবং ত্রুটিগুলি try/catch ব্লক দিয়ে মোকাবিলা করা হয়।

৩.১. Async Error Handling উদাহরণ

const express = require('express');
const app = express();
const port = 3000;

// Dummy async route
app.get('/data', async (req, res, next) => {
  try {
    // কৃত্রিম ত্রুটি
    throw new Error('Failed to fetch data');
  } catch (err) {
    next(err); // ত্রুটি next middleware-এ পাঠানো হচ্ছে
  }
});

// Error Handling Middleware
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    message: 'Internal Server Error',
    error: err.message
  });
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে:

  • Async function এর মধ্যে ত্রুটি ঘটলে তা catch ব্লকের মাধ্যমে ধরা হয় এবং next() ফাংশনের মাধ্যমে Error Handling Middleware-এ পাঠানো হয়।

৪. 404 Error Handling

আপনি যদি কোন রাউটের জন্য 404 Not Found ত্রুটি প্রদান করতে চান, তবে এটি সাধারণত Error Handling Middleware এর আগে ব্যবহৃত হয়। এতে সব রিকোয়েস্ট চেক করা হয়, এবং যদি কোনো রাউট পাওয়া না যায় তবে 404 স্ট্যাটাস কোড রিটার্ন করা হয়।

৪.১. 404 Error Handling উদাহরণ

const express = require('express');
const app = express();
const port = 3000;

// কিছু রাউট তৈরি
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// 404 Error Middleware (যদি রাউট না পাওয়া যায়)
app.use((req, res, next) => {
  res.status(404).json({
    message: 'Resource not found'
  });
});

// Error Handling Middleware
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    message: 'Internal Server Error',
    error: err.message
  });
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে:

  • যদি কোনো রিকোয়েস্ট / বা অন্য কোনো রাউটে না আসে, তবে 404 ত্রুটি রিটার্ন করা হবে।

৫. ত্রুটি লগিং এবং মনিটরিং

আপনার অ্যাপ্লিকেশনে ত্রুটি লগিং এবং মনিটরিং করার জন্য, আপনি বিভিন্ন থার্ড-পার্টি লাইব্রেরি যেমন Winston, Morgan, বা Sentry ব্যবহার করতে পারেন। এই লাইব্রেরিগুলি ত্রুটি লগিং এবং বিশ্লেষণ সহজ করে।

৫.১. Winston ব্যবহার করে লগিং

const winston = require('winston');

// Winston logger configuration
const logger = winston.createLogger({
  level: 'info',
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' })
  ]
});

// Error Handling Middleware with Winston
app.use((err, req, res, next) => {
  logger.error(err.stack); // ত্রুটির লগ
  res.status(500).json({
    message: 'Internal Server Error',
    error: err.message
  });
});

এখানে:

  • Winston ব্যবহার করে ত্রুটির লগ ফাইল এবং কনসোলে লেখা হচ্ছে।

সারাংশ

ExpressJS-এ Error Handling Middleware তৈরি করা একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনকে স্থিতিশীল এবং নিরাপদ রাখে। Error Handling Middleware ত্রুটি শনাক্ত ও সেগুলি প্রক্রিয়া করার জন্য ব্যবহৃত হয়। async/await ব্যবহার করার সময়, ত্রুটির সঠিকভাবে হ্যান্ডেল করতে try/catch ব্যবহার করা হয় এবং কাস্টম ত্রুটি বার্তা প্রদান করা হয়। এছাড়া, 404 Error Handling এবং ত্রুটি লগিং সরঞ্জাম (যেমন: Winston) ব্যবহার করে ত্রুটি আরও ভালোভাবে পরিচালনা করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...