जॉय सत्यापन लाइब्रेरी का उपयोग करके अनुरोध स्तर पर डेटा को सत्यापित करके अपने एप्लिकेशन सुरक्षित करें।

वेब एप्लिकेशन में परीक्षण न किए गए और अमान्य डेटा को स्वीकार करने से सुरक्षा कमजोरियां हो सकती हैं, और अमान्य डेटा से अप्रत्याशित समस्याएं उत्पन्न हो सकती हैं।

Node.js ORM, जैसे सीक्वेलाइज़ और टाइपओआरएम, आपको एप्लिकेशन स्तर पर सत्यापन नियमों को बॉक्स से बाहर सेट करने की अनुमति देते हैं। एपीआई विकास के दौरान, डेटा HTTP अनुरोधों से विशिष्ट समापन बिंदुओं तक आता है। यह अनुरोध स्तर पर होता है; इस प्रकार, ओआरएम द्वारा प्रस्तावित डिफ़ॉल्ट सत्यापन उन पर लागू नहीं होता है।

जोई जावास्क्रिप्ट के लिए एक स्कीमा विवरण और डेटा सत्यापनकर्ता है। यहां, आप सीखेंगे कि अनुरोध स्तर पर डेटा को सत्यापित करने के लिए जॉय सत्यापन लाइब्रेरी का उपयोग कैसे करें।

डेमो प्रोजेक्ट स्थापित करना

यह प्रदर्शित करने के लिए कि कैसे जॉय डेटा को मान्य करता है, आप एक सरल डेमो एप्लिकेशन बनाएंगे जो वास्तविक एप्लिकेशन की नकल करता है।

सबसे पहले, एक प्रोजेक्ट फ़ोल्डर बनाएं और निम्न कमांड चलाकर उसमें जाएं:

एमकेडीआईआर डेमोएप और सीडी डेमोएप

इसके बाद, अपनी प्रोजेक्ट निर्देशिका में npm को चलाकर प्रारंभ करें:

एनपीएम इनिट-वाई

इसके बाद, आपको कुछ निर्भरताएँ स्थापित करने की आवश्यकता होगी। इस ट्यूटोरियल के लिए आवश्यक निर्भरताओं में निम्नलिखित शामिल हैं:

  • अभिव्यक्त करना: एक्सप्रेस एक Node.js फ्रेमवर्क है जो वेब और मोबाइल एप्लिकेशन के लिए सुविधाओं का एक मजबूत सेट प्रदान करता है। एक्सप्रेस Node.js के साथ बैकएंड एप्लिकेशन बनाना आसान बनाता है।
  • जॉय: Joi Node.js के लिए एक डेटा सत्यापन लाइब्रेरी है।

निर्भरताएँ स्थापित करें नोड पैकेज प्रबंधक नीचे दिए गए आदेश को चलाकर:

एनपीएम इंस्टाल एक्सप्रेस जॉय

इसके बाद, एक बनाएं सूचकांक.जे.एस अपनी रूट निर्देशिका में फ़ाइल करें और उसमें निम्नलिखित कोड ब्लॉक जोड़ें:

कॉन्स्ट एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
कॉन्स्ट राउटर = ज़रूरत होना("./मार्ग");
कॉन्स्ट पोर्ट = 3000;

कॉन्स्ट ऐप = एक्सप्रेस();

ऐप.यूज़ (एक्सप्रेस.जेसन());
ऐप.यूज़ (express.urlencoded({ विस्तारित: सत्य }));
ऐप.यूज़ (राउटर);

ऐप.सुनें (पोर्ट, () => {
सांत्वना देना।लकड़ी का लट्ठा("ऐप पोर्ट 3000 पर सुन रहा है!");
});

उपरोक्त कोड ब्लॉक एक साधारण एक्सप्रेस सर्वर सेट करता है। यह आने वाले अनुरोध डेटा को पार्स करने और आने वाले अनुरोधों को संभालने के लिए मिडलवेयर को कॉन्फ़िगर करता है और पोर्ट 3000 पर आने वाले अनुरोधों को सुनने के लिए सर्वर शुरू करता है।

रूटिंग और हैंडलिंग अनुरोध

सरलता के लिए, आप एक अनुरोध हैंडलर मिडलवेयर बनाएंगे जो आपके एप्लिकेशन पर डेटा भेजने का प्रयास करने वाले प्रत्येक अनुरोध के जवाब के रूप में अनुरोध निकाय के साथ एक स्थिति कोड लौटाता है।

एक बनाने के हैंडलर.जे.एस अपने प्रोजेक्ट की रूट डायरेक्टरी में फ़ाइल करें और नीचे कोड ब्लॉक जोड़ें:

कॉन्स्ट डेमोहैंडलर = (req, res, अगला) => {
पुनः भेजें({
कोड: 201,
डेटा: req.body,
});
अगला();
};

मापांक.exports = डेमोहैंडलर;

इसके बाद, एक बनाएं राउटर.जे.एस अपने प्रोजेक्ट की रूट डायरेक्टरी में फ़ाइल करें और नीचे दिए गए कोड ब्लॉक को अपनी फ़ाइल में जोड़ें:

कॉन्स्ट एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
कॉन्स्ट डेमोहैंडलर = ज़रूरत होना("./हैंडलर");
कॉन्स्ट राउटर = एक्सप्रेस. राउटर();

राउटर.पोस्ट("/साइन अप करें", डेमोहैंडलर);

मापांक.निर्यात = राउटर;

एक जॉय स्कीमा बनाना

जॉय स्कीमा एक विशिष्ट डेटा ऑब्जेक्ट की अपेक्षित संरचना और सत्यापन नियमों का प्रतिनिधित्व करती है।

जॉय स्कीम बनाने के लिए, आप इसका उपयोग कर सकते हैं जॉय.ऑब्जेक्ट() आपके डेटा की संरचना और सत्यापन आवश्यकताओं को परिभाषित करने के लिए जॉय द्वारा उजागर किए गए विभिन्न सत्यापन नियमों की विधि और श्रृंखला।

उदाहरण के लिए:

कॉन्स्ट exampleSchema = Joi.object({
नाम: Joi.string().min(3)।आवश्यक(),
});

उपरोक्त उदाहरण एक सरल जॉय स्कीमा का वर्णन करता है नाम संपत्ति। नाम संपत्ति का मूल्य होता है Joi.string().न्यूनतम (3).आवश्यक(). इसका मतलब यह है कि नाम मान एक स्ट्रिंग होना चाहिए, जिसकी लंबाई कम से कम 3 अक्षर होनी चाहिए, और यह आवश्यक है।

जॉय का उपयोग करके, आप अपनी स्कीमा में परिभाषित प्रत्येक फ़ील्ड में अधिक सत्यापन बाधाएं जोड़ने के लिए विभिन्न तरीकों को श्रृंखलाबद्ध कर सकते हैं।

यहां अधिक फ़ील्ड और सत्यापन बाधाओं वाला एक उदाहरण दिया गया है:

कॉन्स्ट उपयोगकर्तास्कीमा = Joi.object({
ईमेल: Joi.string().ईमेल().आवश्यक(),

पासवर्ड: Joi.string().min(6)।आवश्यक(),

आयु: Joi.number().min(18)।वैकल्पिक(),

नियोजित: Joi.boolean().वैकल्पिक(),

फ़ोन: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
।आवश्यक(),

पता: Joi.object({
सड़क: Joi.string().min(3)।आवश्यक(),
शहर: Joi.string().min(3)।आवश्यक(),
राज्य: Joi.string().min(3)।आवश्यक(),
ज़िप: Joi.number().min(3)।आवश्यक(),
})।आवश्यक(),

 शौक: Joi.array().आइटम (Joi.string()).required(),

}).विकल्प({ शीघ्र गर्भपात: असत्य });

उपयोगकर्तास्कीमा प्रत्येक संपत्ति के लिए निम्नलिखित बाधाओं को परिभाषित करता है:

  • ईमेल: एक वैध ईमेल स्ट्रिंग होनी चाहिए.
  • पासवर्ड: कम से कम 6 अक्षरों वाली एक स्ट्रिंग होनी चाहिए।
  • आयु: न्यूनतम 18 मान वाली एक वैकल्पिक संख्या।
  • कार्यरत: एक वैकल्पिक बूलियन.
  • फ़ोन: एक आवश्यक स्ट्रिंग जो निर्दिष्ट से मेल खाती है रेगेक्स अभिव्यक्ति (/^\d{3}-\d{3}-\d{4}$/).
  • पता: निम्नलिखित उप-गुणों के साथ उपयोगकर्ता के पते का प्रतिनिधित्व करने वाली एक वस्तु।
    • गली: न्यूनतम 3 अक्षरों की लंबाई वाली एक आवश्यक स्ट्रिंग।
    • शहर: न्यूनतम 3 अक्षरों की लंबाई वाली एक आवश्यक स्ट्रिंग।
    • राज्य: न्यूनतम 3 अक्षरों की लंबाई वाली एक आवश्यक स्ट्रिंग।
    • ज़िप: न्यूनतम 3 मान वाली एक आवश्यक संख्या।
  • शौक: स्ट्रिंग्स की एक आवश्यक सरणी।

बाधाओं के अलावा, उपयोगकर्तास्कीमा सेट करता है शीघ्र गर्भपात का विकल्प असत्य. डिफ़ॉल्ट रूप से, जोई पहली त्रुटि का सामना करते ही प्रोग्राम के निष्पादन को रोक देता है और त्रुटि को कंसोल पर प्रिंट कर देता है। हालाँकि, इस विकल्प को सेट करना असत्य यह सुनिश्चित करता है कि जॉय संपूर्ण स्कीमा की जाँच करता है और सामने आई सभी त्रुटियों को कंसोल पर प्रिंट करता है।

जॉय के साथ डेटा मान्य करना

एक बनाने के सत्यापन.जेएस फ़ाइल करें और जोड़ें उपयोगकर्तास्कीमा इसे कोड करें.

जैसे इतना:

//validation.js
कॉन्स्ट जोई= ज़रूरत होना("जॉय");

कॉन्स्ट उपयोगकर्तास्कीमा = Joi.object({
//...
}).विकल्प({ शीघ्र गर्भपात: असत्य });

मापांक.exports = userSchema;

फिर, एक मिडलवेयर बनाएं जो अनुरोध पेलोड को रोकता है और नीचे दिए गए कोड को जोड़कर उन्हें दिए गए स्कीमा के विरुद्ध सत्यापित करता है उपयोगकर्तास्कीमा कोड.

कॉन्स्ट वैलिडेशनमिडलवेयर = (योजना) => {
वापस करना(req, res, अगला) => {
कॉन्स्ट { त्रुटि } = schema.validate (req.body);

अगर (गलती) {
// सत्यापन त्रुटि संभालें
सांत्वना देना.लॉग (त्रुटि.संदेश);

पुनः स्थिति(400.json({ त्रुटियाँ: गलतियों की जानकारी });
} अन्य {
// डेटा मान्य है, अगले मिडलवेयर पर आगे बढ़ें
अगला();
}
};
};

जब कोई अनुरोध किया जाता है, तो मिडलवेयर इसे आमंत्रित करता है मान्य की विधि योजना अनुरोध निकाय को मान्य करने के लिए। यदि कोई सत्यापन त्रुटियां होती हैं, तो मिडलवेयर एक भेजता है 400 गलत अनुरोध सत्यापन त्रुटि विवरण से निकाले गए त्रुटि संदेशों के साथ प्रतिक्रिया।

दूसरी ओर, यदि सत्यापन त्रुटियों के बिना गुजरता है, तो मिडलवेयर कॉल करता है अगला() समारोह।

अंत में, निर्यात करें सत्यापनमिडलवेयर और उपयोगकर्तास्कीमा.

मापांक.निर्यात = {
उपयोगकर्तास्कीमा,
सत्यापनमिडलवेयर,
};

सत्यापन बाधाओं का परीक्षण

आयात सत्यापनमिडलवेयर और उपयोगकर्तास्कीमा तुम्हारे अंदर राउटर.जे.एस फ़ाइल करें और मिडलवेयर को इस प्रकार सेट करें:

कॉन्स्ट {validationMiddleware, userSchema } = ज़रूरत होना("./सत्यापन");

राउटर.पोस्ट("/साइन अप करें", वैलिडेशनमिडिलवेयर (यूजरस्कीमा), डेमोहैंडलर);

नीचे दिए गए आदेश को चलाकर अपना एप्लिकेशन प्रारंभ करें:

नोडअनुक्रमणिका.जेएस

फिर, एक HTTP POST अनुरोध करें लोकलहोस्ट: 3000/साइनअप नीचे दिए गए परीक्षण डेटा का उपयोग करना। आप इसे cURL या किसी अन्य API क्लाइंट का उपयोग करके प्राप्त कर सकते हैं।

{
"ईमेल": "उपयोगकर्ता@उदाहरण", // अमान्य ईमेल प्रारूप
"पासवर्ड": "उत्तीर्ण", // पासवर्ड की लंबाई 6 अक्षर से कम
"आयु": 15, // आयु 18 वर्ष से कम
"कार्यरत": सत्य,
"शौक": ["अध्ययन", "दौड़ना"],
"फ़ोन": "123-456-789", //अमान्य फ़ोन नंबर प्रारूप
"पता": {
"गली": "123",
"शहर": "उदाहरण शहर",
"राज्य": "उदाहरण स्थिति",
"ज़िप": 12345
}
}

यह अनुरोध विफल हो जाएगा और एक त्रुटि ऑब्जेक्ट लौटाएगा क्योंकि पेलोड में ईमेल, पासवर्ड, आयु और फ़ोन जैसे कई अमान्य फ़ील्ड हैं। प्रदत्त त्रुटि ऑब्जेक्ट का उपयोग करके, आप कर सकते हैं त्रुटियों को संभालें उचित रूप से.

जॉय के साथ डेटा सत्यापन को सरल बनाना

यहां आपने जॉय का उपयोग करके डेटा सत्यापन की अधिकांश बुनियादी बातों को कवर किया है। हालाँकि, आप जॉय दस्तावेज़ में अधिक उन्नत तकनीकों और बाधाओं को शामिल कर सकते हैं।

जॉय जावास्क्रिप्ट में डेटा सत्यापन कार्य को सरल बनाता है, एक सहज समाधान प्रदान करता है जो आपके एप्लिकेशन में संग्रहीत डेटा की विश्वसनीयता और अखंडता में काफी सुधार करता है।