JavaScript (Node.js) में डेटा सत्यापन: Joi और Yup
किसी भी वेब एप्लिकेशन में, विशेष रूप से Node.js पर, प्रमुख कार्यों में से एक इनकमिंग डेटा की जांच करना है। सत्यापन के बिना, आपको डेटाबेस त्रुटियाँ, कमजोरियाँ (SQL-इंजेक्शन, XSS) या सर्वर का गलत व्यवहार होने का जोखिम होता है। इस लेख में, हम सत्यापन के लिए दो सबसे लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: Joi और Yup। आप सीखेंगे कि उन्हें कैसे स्थापित करें, स्कीमा कैसे बनाएं और Express के साथ कैसे एकीकृत करें।
सर्वर पर सत्यापन की आवश्यकता क्यों है?
क्लाइंट-साइड सत्यापन (HTML5 या ब्राउज़र में JavaScript) सुविधाजनक है, लेकिन इसे आसानी से बायपास किया जा सकता है। इसलिए, सर्वर-साइड जांच अनिवार्य है। यह सुनिश्चित करता है कि:
- डेटा प्रकार अपेक्षित (स्ट्रिंग, संख्या, ऐरे) से मेल खाते हैं।
- आवश्यक फ़ील्ड खाली नहीं हैं।
- डेटा अनुमत आकार से अधिक नहीं है।
- फ़ॉर्मेट (ईमेल, URL, फ़ोन) सही हैं।
Joi लाइब्रेरी
Joi Hapi.js के निर्माताओं का एक शक्तिशाली वैलिडेटर है। यह जटिल स्कीमा, कस्टम त्रुटि संदेश और एसिंक्रोनस जांच का समर्थन करता है।
स्थापना
npm install joiउपयोगकर्ता पंजीकरण के लिए स्कीमा उदाहरण
const Joi = require('joi');
const userSchema = Joi.object({ username: Joi.string() .alphanum() .min(3) .max(30) .required() .messages({ 'string.min': 'उपयोगकर्ता नाम कम से कम 3 अक्षर का होना चाहिए', 'string.max': 'उपयोगकर्ता नाम 30 अक्षरों से अधिक नहीं होना चाहिए' }), email: Joi.string() .email({ tlds: { allow: false } }) .required(), password: Joi.string() .pattern(new RegExp('^[a-zA-Z0-9]{8,30}$')) .required(), birth_year: Joi.number() .integer() .min(1900) .max(2024)});
// सत्यापनapp.post('/register', (req, res) => { const { error, value } = userSchema.validate(req.body, { abortEarly: false }); if (error) { return res.status(400).json({ status: 'error', message: error.details.map(d => d.message).join(', ') }); } res.json({ status: 'success', data: value });});Joi की उन्नत सुविधाएँ
- ऐरे का सत्यापन:
Joi.array().items(Joi.string()) - सशर्त नियम:
.when('role', { is: 'admin', then: Joi.required() }) - कस्टम फ़ंक्शन:
.custom((value, helpers) => { ... })
Yup लाइब्रेरी
Yup एक हल्की और सहज लाइब्रेरी है, जो React (Formik) इकोसिस्टम में लोकप्रिय है। लेकिन यह सर्वर पर भी बढ़िया काम करती है।
स्थापना
npm install yupलॉगिन के लिए स्कीमा उदाहरण
const yup = require('yup');
const loginSchema = yup.object().shape({ email: yup.string() .email('कृपया सही ईमेल दर्ज करें') .required('ईमेल आवश्यक है'), password: yup.string() .min(8, 'पासवर्ड कम से कम 8 अक्षर का होना चाहिए') .max(50) .required('पासवर्ड आवश्यक है')});
// Express के लिए Middlewareasync function validateLogin(req, res, next) { try { const validatedData = await loginSchema.validate(req.body, { abortEarly: false }); req.validatedData = validatedData; next(); } catch (err) { res.status(400).json({ status: 'error', errors: err.errors // त्रुटि संदेशों की सूची }); }}
app.post('/login', validateLogin, (req, res) => { res.json({ status: 'success', data: req.validatedData });});Yup की विशेषताएँ
- डिफ़ॉल्ट रूप से एसिंक्रोनस सत्यापन (Promise लौटाता है)।
- डेटा परिवर्तन:
.transform((value) => value.tr