Error handling এবং debugging ওয়েব অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ। ExpressJS-এ Custom Error Messages এবং Stack Traces ব্যবহৃত হয় অ্যাপ্লিকেশন বা API-এর সমস্যা দ্রুত চিহ্নিত এবং সমাধান করার জন্য। এই অংশে, আমরা দেখব কিভাবে Custom Error Messages তৈরি করা যায় এবং কিভাবে Stack Traces এর মাধ্যমে ডিবাগিং সহজ করা যায়।
১. ExpressJS-এ Error Handling
ExpressJS-এ error handling খুবই সহজ এবং সহজেই কাস্টমাইজ করা যায়। Error Handling Middleware ব্যবহার করে আপনার অ্যাপ্লিকেশনের কোনো অংশে যখন কোনো সমস্যা হয়, তখন সেই error-কে কাস্টমাইজ করা যায় এবং গ্রাহক বা ডেভেলপারকে উপযুক্ত মেসেজ দেওয়া যায়।
১.১. Basic Error Handling Middleware
ExpressJS-এ সাধারণ error handling middleware এর একটি উদাহরণ:
const express = require('express');
const app = express();
const port = 3000;
// একটি সিম্পল রাউট
app.get('/', (req, res) => {
res.send('Hello World');
});
// কাস্টম error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack); // Stack trace log
res.status(500).send({ message: 'Something went wrong!' });
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
app.use()এই মেথডে error handling middleware ব্যবহার করা হয়, যা সাধারণতerr,req,res, এবংnextপ্যারামিটার নেয়।- err.stack: এটি আপনাকে error এর stack trace দেখাতে সাহায্য করে, যা debugging সহজ করে।
২. Custom Error Messages তৈরি করা
ExpressJS-এ কাস্টম error messages তৈরি করা সম্ভব, এবং তা ক্লায়েন্ট বা ডেভেলপারকে বিস্তারিত ভাবে জানানো যায়। আপনি Error অবজেক্ট ব্যবহার করে একটি কাস্টম error তৈরি করতে পারেন।
২.১. Custom Error Class তৈরি করা
কাস্টম error তৈরি করতে একটি কাস্টম Error class তৈরি করা যেতে পারে। এর মাধ্যমে আপনি error মেসেজ এবং status code কাস্টমাইজ করতে পারবেন।
class CustomError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
this.name = this.constructor.name;
Error.captureStackTrace(this, this.constructor);
}
}
const express = require('express');
const app = express();
const port = 3000;
// একটি রাউট যা কাস্টম error ছুঁড়ে
app.get('/', (req, res, next) => {
const error = new CustomError('This is a custom error message', 400);
next(error);
});
// কাস্টম error handling middleware
app.use((err, req, res, next) => {
res.status(err.statusCode || 500).json({
message: err.message,
stack: err.stack, // Stack trace
});
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
- CustomError Class: এখানে
CustomErrorclass তৈরি করা হয়েছে যাErrorclass থেকে ইনহেরিট করে এবং এতে কাস্টম মেসেজ এবং স্ট্যাটাস কোড অন্তর্ভুক্ত থাকে। - Error.captureStackTrace: এটি stack trace ধারণ করতে সাহায্য করে এবং ডেভেলপারদের সহজে debugging করতে সক্ষম করে।
৩. Error Handling এবং Stack Trace Management
Stack trace হল error এর ট্রেস যা দেখায় errorটি কোথায় ঘটেছে এবং এর আগে কি ঘটেছিল। এটি debugging এর জন্য খুবই কার্যকরী। ExpressJS-এ stack trace এবং error message সঠিকভাবে কাস্টমাইজ করা সম্ভব।
৩.১. Development এবং Production পরিবেশে Stack Trace এর ব্যবহার
যতক্ষণ পর্যন্ত আপনি development পরিবেশে থাকবেন, ততক্ষণ error message এবং stack trace ক্লায়েন্টের কাছে দেখানো যেতে পারে। তবে production পরিবেশে stack trace ক্লায়েন্টের কাছে প্রকাশ করা নিরাপদ নয়, কারণ এটি অ্যাপ্লিকেশন সম্পর্কে সংবেদনশীল তথ্য প্রকাশ করতে পারে।
const express = require('express');
const app = express();
const port = 3000;
// Error handling middleware
app.use((err, req, res, next) => {
const isProduction = process.env.NODE_ENV === 'production';
if (isProduction) {
// production environment-এ শুধুমাত্র কাস্টম মেসেজ দেখানো হবে
res.status(err.statusCode || 500).json({
message: err.message,
});
} else {
// development environment-এ stack trace সহ error message দেখানো হবে
res.status(err.statusCode || 500).json({
message: err.message,
stack: err.stack,
});
}
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
- process.env.NODE_ENV: এটি বর্তমান পরিবেশ (development বা production) চিহ্নিত করে।
- Stack trace: যদি আপনি development পরিবেশে থাকেন, তাহলে stack trace দেখানো হবে, কিন্তু production পরিবেশে শুধুমাত্র error message পাঠানো হবে।
৪. Advanced Error Handling (Validation Errors)
অনেক সময় আপনাকে validation errors বা request validation-এর জন্য কাস্টম error handling করতে হয়। এই ক্ষেত্রে, আপনি express-validator বা অন্য কোনো লাইব্রেরি ব্যবহার করতে পারেন।
৪.১. express-validator দিয়ে Validation Error Handling
express-validator ব্যবহার করে আপনি input validation করতে পারেন এবং ত্রুটি হলে কাস্টম error message প্রদান করতে পারেন।
৪.১.১. express-validator ইনস্টল করা
npm install express-validator
৪.১.২. Validation এবং Custom Error Messages
const express = require('express');
const { body, validationResult } = require('express-validator');
const app = express();
const port = 3000;
app.use(express.json());
// User registration route with validation
app.post('/register', [
body('email').isEmail().withMessage('Invalid email address'),
body('password').isLength({ min: 5 }).withMessage('Password must be at least 5 characters long')
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
res.send('User registered successfully');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
- express-validator: এটি email এবং password ফিল্ডের জন্য validation যোগ করেছে এবং যদি validation fail করে, তখন কাস্টম error messages সহ 400 স্ট্যাটাস কোড পাঠানো হয়।
সারাংশ
ExpressJS-এ error handling অত্যন্ত গুরুত্বপূর্ণ এবং Custom Error Messages এবং Stack Traces এর মাধ্যমে আপনি ত্রুটি শনাক্ত ও সমাধান করতে পারেন। আপনি CustomError class তৈরি করে কাস্টম মেসেজ এবং status code সেট করতে পারেন। এছাড়া, stack trace ডেভেলপারদের জন্য debugging সহজ করে, তবে production পরিবেশে এটি সরিয়ে রাখাও নিরাপত্তার জন্য গুরুত্বপূর্ণ। express-validator ব্যবহার করে input validation এর সময় কাস্টম error message প্রদান করা সম্ভব, যা অ্যাপ্লিকেশনকে আরও সুরক্ষিত এবং ব্যবহারকারী-বান্ধব করে তোলে।
Read more