TypeORM Error Handling: একটি পরিচিতি
Error Handling একটি গুরুত্বপূর্ণ বিষয় যখন আপনি TypeORM ব্যবহার করে ডেটাবেস অপারেশন পরিচালনা করেন। TypeORM আপনাকে সঠিকভাবে ব্যতিক্রম (exceptions) ম্যানেজ করার জন্য প্রয়োজনীয় ফিচার প্রদান করে, যাতে আপনি সহজে ডেটাবেসের সমস্যা শনাক্ত করতে পারেন এবং সেগুলোর উপর সঠিকভাবে প্রতিক্রিয়া জানাতে পারেন। সাধারণত, TypeORM এর QueryFailedError, EntityNotFoundError, ConnectionError, ইত্যাদি এরকম বিভিন্ন ত্রুটি ঘটে, যা ডেটাবেস অপারেশন চলাকালে দেখা যায়।
TypeORM Error Handling এর জন্য প্রাথমিক ধারণা
১. Error Class ব্যবহার করা
TypeORM-এ যখন কোনো ত্রুটি ঘটে, তখন তা Error Class হিসেবে রিটার্ন করা হয়। আপনি এই Error Class ব্যবহার করে ত্রুটির ধরন, বার্তা এবং অন্যান্য বিস্তারিত তথ্য পেতে পারেন।
QueryFailedError
TypeORM-এ QueryFailedError সাধারণত তখন ঘটে যখন SQL কোড ঠিকভাবে রান না করতে পারে, যেমন সঠিকভাবে SQL স্টেটমেন্ট পার্স করা না গেলে অথবা ডেটাবেসে নির্দিষ্ট ডেটা না পাওয়া গেলে।
উদাহরণ:
import { createConnection, getRepository } from "typeorm";
import { User } from "./entity/User";
createConnection().then(async connection => {
try {
const userRepository = getRepository(User);
// Trying to find a non-existing user
const user = await userRepository.findOneOrFail(999); // This will throw an error if user doesn't exist
} catch (error) {
if (error instanceof QueryFailedError) {
console.log("Query Failed Error:", error.message);
} else {
console.log("Other Error:", error);
}
}
}).catch(error => console.log("Connection Error:", error));
এখানে, findOneOrFail() মেথডটি এমন একটি ব্যবহারকারীর জন্য কোয়েরি করছে যা ডাটাবেসে থাকতে পারে না। এই ক্ষেত্রে, একটি QueryFailedError ঘটবে।
EntityNotFoundError
এটি তখন ঘটে যখন TypeORM কোনো নির্দিষ্ট এন্টিটি খুঁজে পায় না, যেমন একটি সম্পর্কিত এন্টিটি খোঁজা হচ্ছে কিন্তু সেটি ডেটাবেসে উপস্থিত নেই।
উদাহরণ:
import { EntityNotFoundError } from "typeorm";
try {
const userRepository = connection.getRepository(User);
const user = await userRepository.findOneOrFail({ id: 999 });
} catch (error) {
if (error instanceof EntityNotFoundError) {
console.log("Entity not found:", error.message);
}
}
ConnectionError
এটি তখন ঘটে যখন ডেটাবেসের সাথে সংযোগ স্থাপন করা সম্ভব হয় না, যেমন ভুল ডাটাবেস ক্রিডেনশিয়ালস বা ডেটাবেস সার্ভারের সাথে সংযোগ বিচ্ছিন্ন হয়ে গেলে।
উদাহরণ:
import { createConnection, ConnectionError } from "typeorm";
createConnection().then(async connection => {
// Do something
}).catch((error) => {
if (error instanceof ConnectionError) {
console.log("Database connection error:", error.message);
} else {
console.log("Other error:", error);
}
});
TypeORM-এ Validation Messages
Validation TypeORM-এ অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়। আপনি যখন Entity তৈরি করেন, তখন তার validation এর জন্য বিভিন্ন decorators ব্যবহার করতে পারেন। TypeORM Entity ফিল্ডে validation প্রয়োগ করতে সাধারণত class-validator লাইব্রেরি ব্যবহার করা হয়।
class-validator লাইব্রেরি TypeORM-এ ইন্টিগ্রেটেড থাকে, যার মাধ্যমে আপনি সঠিক ইনপুট যাচাই করতে পারেন এবং কাস্টম validation error বার্তা প্রদান করতে পারেন।
১. class-validator ব্যবহার করে Validation
আপনি Entity-এর প্রপার্টিতে বিভিন্ন validation decorators ব্যবহার করতে পারেন, যেমন @IsNotEmpty(), @IsEmail(), @MinLength(), ইত্যাদি।
উদাহরণ:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsNotEmpty, IsEmail, MinLength } from "class-validator";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsNotEmpty({ message: "Name should not be empty!" })
name: string;
@Column()
@IsEmail({}, { message: "Invalid email format!" })
email: string;
@Column()
@MinLength(6, { message: "Password must be at least 6 characters long!" })
password: string;
}
এখানে, @IsNotEmpty(), @IsEmail(), এবং @MinLength() ডেকোরেটরগুলি ব্যবহার করা হয়েছে, এবং কাস্টম মেসেজও প্রদান করা হয়েছে। যখন আপনি Entity-টি সেভ করার আগে ভ্যালিডেশন প্রয়োগ করবেন, তখন এই মেসেজগুলো দেখা যাবে।
২. Validation চেক করা
Entity-তে validation প্রয়োগ করার পরে, সেই validation চেক করা প্রয়োজন। TypeORM-এ Entity-এর ডেটা সেভ করার আগে আপনি validate() মেথড ব্যবহার করে সেগুলো যাচাই করতে পারেন।
উদাহরণ:
import { validate } from "class-validator";
import { User } from "./entity/User";
const user = new User();
user.name = "";
user.email = "invalid-email";
user.password = "123";
// Validate the user object
validate(user).then(errors => {
if (errors.length > 0) {
console.log("Validation failed. Errors: ", errors);
} else {
console.log("Validation succeeded!");
}
});
এখানে, validate() মেথডটি User এন্টিটির ভ্যালিডেশন চেক করছে এবং যদি কোনো ত্রুটি থাকে, তবে তা কনসোলে প্রদর্শিত হবে।
৩. Custom Validation Error Messages
TypeORM এবং class-validator এর মাধ্যমে আপনি কাস্টম error messages তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি যদি কোনো একটি ফিল্ডে বিশেষ ধরনের ত্রুটি চান, তবে আপনি message প্রপার্টি ব্যবহার করে একটি কাস্টম মেসেজ দিতে পারেন।
উদাহরণ:
import { IsEmail, IsNotEmpty, Length, validate } from "class-validator";
class User {
@IsNotEmpty({ message: "Name is required!" })
name: string;
@IsEmail({}, { message: "Please provide a valid email address!" })
email: string;
@Length(6, 20, { message: "Password must be between 6 and 20 characters!" })
password: string;
}
const user = new User();
user.name = "";
user.email = "invalidemail";
user.password = "12345";
validate(user).then(errors => {
if (errors.length > 0) {
console.log("Validation failed. Errors: ", errors);
} else {
console.log("Validation succeeded!");
}
});
এখানে, যদি name ফিল্ড খালি থাকে, email ভুল ফরম্যাটে থাকে, অথবা password ৬টি ক্যারেক্টারের কম হয়, তাহলে কাস্টম error messages প্রদর্শিত হবে।
সারাংশ
Error Handling এবং Validation TypeORM এর খুবই গুরুত্বপূর্ণ অংশ। Error Handling এর মাধ্যমে আপনি ডেটাবেস অপারেশনের সময় ঘটে যাওয়া ত্রুটিগুলো সহজে ধরতে পারেন এবং সেগুলোর উপর সঠিকভাবে প্রতিক্রিয়া জানাতে পারেন। Validation TypeORM-এ Entity ফিল্ডের জন্য ব্যবহার করা হয় এবং এতে class-validator লাইব্রেরি ব্যবহৃত হয়। Custom Validation Messages প্রদান করে, আপনি ডেটা ইনপুটের জন্য পরিষ্কার এবং কাস্টম বার্তা দিতে পারেন যা ইউজারদের জন্য আরও ব্যবহারকারী বান্ধব হতে সহায়ক হয়। TypeORM-এ এসব টেকনিক ব্যবহার করে আপনি আরও কার্যকরী এবং নির্ভরযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Read more