मॉड्यूल पाठ (3/4)
चुनौती: डेटा सत्यापनकर्ता
इनपुट डेटा को सत्यापित करना उन चीजों में से एक है जो आप अक्सर करेंगे: कोई फॉर्म नहीं, कोई एपीआई आँख बंद करके नहीं कर सकता जो मिलता है उस पर भरोसा करो. आइए एक छोटा सत्यापनकर्ता बनाएं जो संयोजन योग्य नियमों और को जोड़ता है पायी गयी सभी त्रुटियाँ लौटाता है, केवल पहली वाली नहीं।
एक नियम = एक कार्य
एक नियम ऑब्जेक्ट लेता है और त्रुटि संदेश के साथ null (सभी अच्छे) या स्ट्रिंग लौटाता है।
const nomeRichiesto = (utente) =>
utente.nome && utente.nome.length > 0 ? null : 'nome obbligatorio';
const etaMaggiore = (utente) => (utente.eta >= 18 ? null : 'devi essere maggiorenne');अनेक नियमों की रचना करना
सत्यापनकर्ता सभी नियम चलाता है और त्रुटियाँ एकत्र करता है:
function valida(utente, regole) {
const errori = [];
for (const regola of regole) {
const msg = regola(utente);
if (msg) errori.push(msg);
}
return errori;
}कार्यात्मक शैली:
const valida = (obj, regole) => regole.map((r) => r(obj)).filter((m) => m !== null);यह तय करना कि क्या यह वैध है
const errori = valida(utente, [nomeRichiesto, etaMaggiore]);
const ok = errori.length === 0;उपयोगी पैटर्न: नियम फ़ैक्टरी
जब आपके पास एक ही तर्क के साथ सत्यापन करने के लिए कई फ़ील्ड हों, तो एक फ़ैक्टरी लिखें:
const richiesto = (campo) => (obj) =>
obj[campo] != null && obj[campo] !== '' ? null : `${campo} obbligatorio`;
const minimo = (campo, n) => (obj) => (obj[campo] >= n ? null : `${campo} deve essere >= ${n}`);
const regole = [richiesto('nome'), richiesto('email'), minimo('eta', 18)];प्रत्येक फ़ैक्टरी एक पूर्व-कॉन्फ़िगर नियम फ़ंक्शन लौटाती है। यह बिल्कुल पार्सर का उपयोग करने जैसा है जनरेटर या एक सत्यापनकर्ता जैसे कि ज़ॉड, बस लघु रूप में।
इसे अजमाएं
`मान्य (ओबीजे, नियम)` को परिभाषित करें: प्रत्येक नियम को लागू करें (फ़ंक्शन ओबीजे -> स्ट्रिंग | नल) और नियमों के समान क्रम में केवल गैर-शून्य संदेशों वाली एक सरणी लौटाएं।
संकेत दिखाएँ
नियम.मानचित्र((आर) => आर(ओबीजे)).फिल्टर((एम) => एम !== शून्य)
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
फ़ैक्टरी `आवश्यक (फ़ील्ड)` को परिभाषित करें: यह एक नियम देता है कि, किसी ऑब्जेक्ट को दिए जाने पर, यदि obj[फ़ील्ड] गैर-रिक्त है (शून्य नहीं, अपरिभाषित नहीं, खाली स्ट्रिंग नहीं है), तो स्ट्रिंग '<फ़ील्ड> obbligatorio' शून्य हो जाती है।
संकेत दिखाएँ
एक क्लोजर लौटाएँ जिसमें obj[फ़ील्ड] लिखा हो।
3 प्रयासों के बाद समाधान उपलब्ध है