class-validator का परिचय
class-validator TypeScript और JavaScript में डेटा वैलिडेशन के लिए एक शक्तिशाली और लोकप्रिय लाइब्रेरी है, जो डेकोरेटर पर आधारित है। यह आपको क्लास के अंदर ही वैलिडेशन नियमों को डिक्लेरेटिव तरीके से परिभाषित करने की अनुमति देता है, जिससे कोड साफ, पढ़ने में आसान और मेंटेन करने में सरल हो जाता है।
यह लाइब्रेरी विशेष रूप से सर्वर-साइड एप्लिकेशन (जैसे NestJS या Express) बनाते समय उपयोगी है, जहां इनकमिंग रिक्वेस्ट, फॉर्म डेटा, कॉन्फ़िगरेशन और अन्य डेटा स्ट्रक्चर को वैलिडेट करना आवश्यक होता है। लंबी if-else चेन लिखने के बजाय, आप बस क्लास प्रॉपर्टीज पर डेकोरेटर जोड़ देते हैं।
class-validator की आवश्यकता क्यों?
- डिक्लेरेटिव: वैलिडेशन नियम डेटा के पास ही परिभाषित होते हैं, जिससे कोड पढ़ने में आसानी होती है।
- शक्तिशाली वैलिडेटर सेट: स्ट्रिंग, नंबर, डेट, ऐरे, नेस्टेड ऑब्जेक्ट आदि की जांच के लिए दर्जनों बिल्ट-इन डेकोरेटर शामिल हैं।
- कस्टम वैलिडेटर: अपने खुद के नियम आसानी से बनाए जा सकते हैं।
- TypeScript इंटीग्रेशन: टाइप्स और डेकोरेटर का पूरा सपोर्ट।
- एसिंक्रोनस वैलिडेशन: उन जांचों को सपोर्ट करता है जिनमें एसिंक्रोनस ऑपरेशन (जैसे डेटाबेस में यूनिकनेस की जांच) की आवश्यकता होती है।
इंस्टॉलेशन
class-validator का उपयोग करने के लिए आपको Node.js और npm/yarn की आवश्यकता होगी। लाइब्रेरी और आवश्यक डिपेंडेंसी इंस्टॉल करें:
npm install class-validator class-transformer reflect-metadata
या yarn के माध्यम से:
yarn add class-validator class-transformer reflect-metadata
महत्वपूर्ण: डेकोरेटर के काम करने के लिए reflect-metadata लाइब्रेरी अनिवार्य है। सुनिश्चित करें कि इसे आपकी मुख्य फ़ाइल (जैसे index.ts या main.ts) में इम्पोर्ट किया गया है:
import 'reflect-metadata';
साथ ही, सुनिश्चित करें कि आपके tsconfig.json में निम्नलिखित सेटिंग्स शामिल हैं:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
त्वरित शुरुआत
चलिए एक सरल यूज़र मॉडल बनाते हैं और उसे वैलिडेट करते हैं।
import 'reflect-metadata';
import { validate, IsString, IsEmail, MinLength } from 'class-validator';
import { plainToClass } from 'class-transformer';
class User {
@IsString()
@MinLength(3, { message: 'नाम में कम से कम 3 अक्षर होने चाहिए' })
name: string;
@IsEmail({}, { message: 'गलत ईमेल पता' })
email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
}
async function main() {
// गलत डेटा के साथ ऑब्जेक्ट बनाएं
const userData = { name: 'Jo', email: 'not-an-email' };
// सादे ऑब्जेक्ट को क्लास इंस्टेंस में बदलें
const user = plainToClass(User, userData);
// वैलिडेट करें
const errors = await validate(user);
if (errors.length > 0) {
console.log('वैलिडेशन त्रुटियाँ:', errors);
errors.forEach(error => {
console.log(`फ़ील्ड: ${error.property}`);
for (const constraint in error.constraints) {
console.log(` - ${error.constraints[constraint]}`);
}
});
} else {
console.log('वैलिडेशन सफलतापूर्वक पास!');
}
}
main();
// आउटपुट:
// वैलिडेशन त्रुटियाँ: [...]
// फ़ील्ड: name
// - नाम में कम से कम 3 अक्षर होने चाहिए
// फ़ील्ड: email
// - गलत ईमेल पता
मुख्य मेथड्स और डेकोरेटर
1. @IsString()
क्या करता है: जांचता है कि मान स्ट्रिंग है या नहीं।
पैरामीटर: वैकल्पिक ऑब्जेक्ट लेता है जिसमें वैलिडेशन विकल्प होते हैं (जैसे { message: '...' })।
class Product {
@IsString()
title: string;
}
2. @IsNumber()
क्या करता है: जांचता है कि मान नंबर है या नहीं।
पैरामीटर: वैकल्पिक विकल्प जैसे allowNaN (NaN की अनुमति) और allowInfinity (Infinity की अनुमति)।
class Product {
@IsNumber()
price: number;
}
3. @MinLength(min: number)
क्या करता है: जांचता है कि स्ट्रिंग की लंबाई कम से कम निर्दिष्ट मान हो।
पैरामीटर: min - न्यूनतम लंबाई (संख्या)।
class User {
@MinLength(6, { message: 'पासवर्ड में कम से कम 6 अक्षर होने चाहिए' })
password: string;
}
4. @MaxLength(max: number)
क्या करता है: जांचता है कि स्ट्रिंग की लंबाई निर्दिष्ट मान से अधिक न हो।
पैरामीटर: max - अधिकतम लंबाई (संख्या)।
class Post {
@MaxLength(200, { message: 'शीर्षक 200 अक्षरों से अधिक नहीं होना चाहिए' })
title: string;
}
5. @IsEmail()
क्या करता है: जांचता है कि मान एक वैध ईमेल पता है या नहीं।
पैरामीटर: वैकल्पिक विकल्प जैसे allow_display_name (डिस्प्ले नाम की अनुमति) और require_tld (TLD की आवश्यकता)।
class Contact {
@IsEmail()
email: string;
}
6. @IsArray()
क्या करता है: जांचता है कि मान एक ऐरे है या नहीं।
पैरामीटर: कोई अतिरिक्त पैरामीटर नहीं।
class Blog {
@IsArray()
tags: string[];
}
7. @ArrayMinSize(min: number)
क्या करता है: जांचता है कि ऐरे में कम से कम निर्दिष्ट संख्या में तत्व हों।
पैरामीटर: min - न्यूनतम तत्वों की संख्या।
class Team {
@ArrayMinSize(2, { message: 'टीम में कम से कम 2 सदस्य होने चाहिए' })
members: string[];
}
8. @ArrayMaxSize(max: number)
क्या करता है: जांचता है कि ऐरे में निर्दिष्ट संख्या से अधिक तत्व न हों।
पैरामीटर: max - अधिकतम तत्वों की संख्या।
class Team {
@ArrayMaxSize(11, { message: 'टीम में अधिकतम 11 सदस्य हो सकते हैं' })
members: string[];
}
9. @IsBoolean()
क्या करता है: जांचता है कि मान बूलियन है या नहीं।
पैरामीटर: कोई अतिरिक्त पैरामीटर नहीं।
class Settings {
@IsBoolean()
isActive: boolean;
}
10. @IsDate()
क्या करता है: जांचता है कि मान एक वैध Date ऑब्जेक्ट है या नहीं।
पैरामीटर: कोई अतिरिक्त पैरामीटर नहीं।
class Event {
@IsDate()
startDate: Date;
}
11. @IsOptional()
क्या करता है: यदि मान undefined या null है तो वैलिडेशन छोड़ देता है।
पैरामीटर: कोई अतिरिक्त पैरामीटर नहीं।
class Profile {
@IsOptional()
@IsString()
bio?: string;
}
12. @ValidateNested()
क्या करता है: नेस्टेड ऑब्जेक्ट्स को वैलिडेट करता है।
पैरामीटर: वैकल्पिक विकल्प जैसे each: true (यदि यह ऐरे है)।
class Address {
@IsString()
city: string;
}
class User {
@ValidateNested()
address: Address;
}
निष्कर्ष
class-validator TypeScript प्रोजेक्ट्स में डेटा वैलिडेशन को सरल और शक्तिशाली बनाता है। इसके डिक्लेरेटिव दृष्टिकोण, व्यापक बिल्ट-इन वैलिडेटर और कस्टम वैलिडेशन की सुविधा इसे डेवलपर्स के लिए एक आवश्यक टूल बनाती है। चाहे आप NestJS, Express, या किसी अन्य फ्रेमवर्क का उपयोग कर रहे हों, class-validator आपके कोड को साफ, सुरक्षित और मेंटेन करने में आसान बनाएगा।