ExpressJS-এ Error Handling Middleware (ত্রুটি পরিচালনা মিডলওয়্যার) ব্যবহৃত হয় অ্যাপ্লিকেশনে যেকোনো ধরনের ত্রুটি বা ত্রুটি পরিস্থিতি সঠিকভাবে ধরতে এবং পরিচালনা করতে। এটি এমন এক ধরনের মিডলওয়্যার যা অ্যাপ্লিকেশনের অন্য সব রাউট এবং মিডলওয়্যার চালানোর পর সিস্টেমের ত্রুটি সনাক্ত করে এবং তা উপযুক্তভাবে হ্যান্ডেল করে।
একটি সঠিক ত্রুটি পরিচালনা প্রক্রিয়া অ্যাপ্লিকেশনটিকে আরো স্থিতিশীল এবং ব্যবহারকারীর জন্য সুবিধাজনক করে তোলে, বিশেষত যখন কোনো রাউট বা কার্যকলাপে কোনো ত্রুটি ঘটে।
Error Handling Middleware কিভাবে কাজ করে?
ExpressJS ত্রুটি পরিচালনার জন্য একটি বিশেষ মিডলওয়্যার তৈরি করতে সাহায্য করে, যা app.use() এর মাধ্যমে ব্যবহৃত হয়। এই মিডলওয়্যারটি সাধারণত ৪টি আর্গুমেন্ট নেয়:
err: ত্রুটি (Error) অবজেক্টreq: HTTP অনুরোধ (Request) অবজেক্টres: HTTP প্রতিক্রিয়া (Response) অবজেক্টnext: পরবর্তী মিডলওয়্যার ফাংশন কল করার জন্য ব্যবহার করা হয়
এই ৪টি আর্গুমেন্টের মাধ্যমে আপনি ত্রুটি (error) সনাক্ত করে প্রয়োজনীয় পদক্ষেপ নিতে পারবেন, যেমনঃ কাস্টম ত্রুটি বার্তা পাঠানো বা HTTP স্ট্যাটাস কোড সেট করা।
ExpressJS ত্রুটি পরিচালনার উদাহরণ
এখানে একটি সাধারণ ExpressJS ত্রুটি পরিচালনার মিডলওয়্যারের উদাহরণ দেওয়া হলো:
১. সাধারণ ত্রুটি পরিচালনা
const express = require('express');
const app = express();
const port = 3000;
// রুট রাউট
app.get('/', (req, res) => {
res.send('Hello World!');
});
// একটি ভুল রাউট (যেখানে ত্রুটি ঘটবে)
app.get('/error', (req, res, next) => {
const error = new Error('This is a sample error');
next(error); // ত্রুটি পরবর্তী মিডলওয়্যারকে পাঠানো হচ্ছে
});
// ত্রুটি পরিচালনা মিডলওয়্যার
app.use((err, req, res, next) => {
console.error(err.stack); // ত্রুটি লগ করা
res.status(500).send('Something went wrong!'); // ক্লায়েন্টকে ত্রুটি বার্তা পাঠানো
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
কোড ব্যাখ্যা:
app.get('/error', ...): এই রাউটটি ত্রুটি ঘটানোর জন্য তৈরি করা হয়েছে, যেখানে একটি কাস্টম ত্রুটি তৈরি করেnext(error)দিয়ে পরবর্তী মিডলওয়্যারে পাঠানো হয়েছে।- Error Handling Middleware:
app.use()এর মাধ্যমে একটি ত্রুটি পরিচালনা মিডলওয়্যার যুক্ত করা হয়েছে যা সব রাউটের পর কার্যকর হবে। এই মিডলওয়্যারটি ত্রুটি লগ করবে এবং HTTP 500 (Internal Server Error) স্ট্যাটাস কোড সহ কাস্টম ত্রুটি বার্তা পাঠাবে।
২. কাস্টম ত্রুটি বার্তা এবং স্ট্যাটাস কোড
আপনি ত্রুটির ধরন অনুযায়ী কাস্টম ত্রুটি বার্তা এবং স্ট্যাটাস কোড নির্ধারণ করতে পারেন। উদাহরণস্বরূপ:
// কাস্টম ত্রুটি তৈরি এবং সেট করা
app.get('/not-found', (req, res, next) => {
const error = new Error('Page Not Found');
error.status = 404; // স্ট্যাটাস কোড 404 (Not Found)
next(error); // ত্রুটি পরবর্তী মিডলওয়্যারকে পাঠানো হচ্ছে
});
// ত্রুটি পরিচালনা মিডলওয়্যার
app.use((err, req, res, next) => {
res.status(err.status || 500); // যদি স্ট্যাটাস কোড না থাকে তবে 500 ব্যবহার করুন
res.json({
message: err.message, // ত্রুটি বার্তা
stack: err.stack // ত্রুটির স্ট্যাক ট্রেস (ডেভেলপারের জন্য)
});
});
কোড ব্যাখ্যা:
error.status = 404;: কাস্টম স্ট্যাটাস কোড (যেমন 404) নির্ধারণ করা হচ্ছে।res.status(err.status || 500);: যদি ত্রুটি অবজেক্টে কোনো স্ট্যাটাস কোড না থাকে, তবে ডিফল্ট 500 স্ট্যাটাস কোড ব্যবহার করা হবে।
৩. Asynchronous ত্রুটি হ্যান্ডলিং
ExpressJS তে অ্যাসিঙ্ক্রোনাস রাউটগুলোতেও ত্রুটি হ্যান্ডলিং করতে হয়। সাধারণত, আপনি একটি try-catch ব্লক ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি পরিচালনা করেন।
app.get('/async-error', async (req, res, next) => {
try {
// সিমুলেটেড অ্যাসিঙ্ক্রোনাস ত্রুটি
const result = await someAsyncFunction();
res.send(result);
} catch (error) {
next(error); // ত্রুটি পরবর্তী মিডলওয়্যারকে পাঠানো হচ্ছে
}
});
এখানে next(error) ব্যবহার করে অ্যাসিঙ্ক্রোনাস ত্রুটি সঠিকভাবে মিডলওয়্যারে পাঠানো হচ্ছে।
সারাংশ
ExpressJS ত্রুটি পরিচালনা একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনকে স্থিতিশীল এবং ব্যবহারকারীর জন্য সুবিধাজনক করে তোলে। ত্রুটি পরিচালনা মিডলওয়্যার দিয়ে আপনি যেকোনো ধরনের ত্রুটি সনাক্ত করতে পারেন এবং কাস্টম ত্রুটি বার্তা ও স্ট্যাটাস কোডের মাধ্যমে ব্যবহারকারীকে উপযুক্ত প্রতিক্রিয়া প্রদান করতে পারেন। এভাবে, অ্যাপ্লিকেশনটি অনেক বেশি সুরক্ষিত এবং ব্যবহারকারী-বান্ধব হয়ে ওঠে।
Read more