మాడ్యూల్ పాఠాలు (3/4)
ఛాలెంజ్: డేటా వాలిడేటర్
ఇన్పుట్ డేటాను ధృవీకరించడం అనేది మీరు తరచుగా చేసే పనులలో ఒకటి: ఫారమ్ లేదు, ఏ API గుడ్డిగా చేయదు అది ఏమి పొందుతుందో విశ్వసించండి. కంపోజబుల్ నియమాలు మరియు మిళితం చేసే చిన్న వ్యాలిడేటర్ను రూపొందిద్దాం మొదటిది మాత్రమే కాకుండా కనుగొనబడిన అన్ని లోపాలను అందిస్తుంది.
ఒక నియమం = ఒక విధి
ఒక నియమం ఆబ్జెక్ట్ని తీసుకుంటుంది మరియు 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)];ప్రతి ఫ్యాక్టరీ ముందుగా కాన్ఫిగర్ చేసిన రూల్ ఫంక్షన్ని అందిస్తుంది. ఇది ఖచ్చితంగా పార్సర్ని ఉపయోగించడం లాంటిది జెనరేటర్ లేదా Zod వంటి వాలిడేటర్, కేవలం సూక్ష్మ రూపంలో.
దీనిని ప్రయత్నించండి
`ధృవీకరణ(obj, నియమాలు)`ని నిర్వచించండి: ప్రతి నియమాన్ని (ఫంక్షన్ obj -> స్ట్రింగ్|శూన్య) వర్తింపజేయండి మరియు నిబంధనల ప్రకారం అదే క్రమంలో శూన్య సందేశాలను మాత్రమే కలిగి ఉన్న శ్రేణిని తిరిగి ఇవ్వండి.
సూచనను చూపించు
నియమాలు.map((r) => r(obj)).filter((m) => m !== null)
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
ఫ్యాక్టరీ `అవసరం(ఫీల్డ్)`ని నిర్వచించండి: ఇది obj[ఫీల్డ్] ఖాళీగా ఉంటే (శూన్యం కాదు, నిర్వచించబడదు, ఖాళీ స్ట్రింగ్ కాదు), లేకుంటే '<field> obbligatorio' అనే స్ట్రింగ్ని అందించినట్లయితే, ఆబ్జెక్ట్ ఇచ్చినప్పుడు అది శూన్యతను తిరిగి ఇస్తుంది.
సూచనను చూపించు
obj[ఫీల్డ్] అని చదివే మూసివేతను తిరిగి ఇవ్వండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది