‫Istruttore: Quindi, Mongoose offre a
‫noi sviluppatori modi molto potenti per convalidare
‫i dati che entrano nel nostro modello.
‫E così, in questo video
‫imparerai tutto sulla convalida dei dati con Mongoose.
‫Ora, cosa significa esattamente convalida?
‫Bene, la convalida sta fondamentalmente controllando se i valori inseriti
‫sono nel formato giusto per ogni campo
‫nel nostro schema del documento, e anche che i
‫valori siano stati effettivamente inseriti per tutti i campi richiesti.
‫Ora, d'altra parte, abbiamo anche la sanificazione, che
‫serve a garantire che i dati immessi siano
‫sostanzialmente puliti, in modo che non venga
‫iniettato codice dannoso nel
‫nostro database o nell'applicazione stessa.
‫Quindi, in quel passaggio rimuoviamo i caratteri indesiderati,
‫o anche il codice, dai dati di input, va bene?
‫E questo è in realtà un passaggio
‫cruciale, come uno standard d'oro nello sviluppo del back-end.
‫Non accettare mai e poi mai i dati di
‫input provenienti da un utente così com'è.
‫Quindi, abbiamo sempre bisogno di disinfettare i dati in arrivo.
‫Ma, comunque, lascerò la sanificazione dei dati
‫per la sezione sicurezza del corso,
‫in modo che
‫in questa lezione possiamo concentrarci interamente sulla convalida dei dati.
‫E stiamo eseguendo questa convalida dei
‫dati proprio qui sul modello.
‫E questo, ancora una volta, è dovuto alla filosofia
‫del modello grasso e del
‫controller sottile, che rende il modello
‫il luogo perfetto per eseguire la convalida, giusto?
‫E, in effetti, Mongoose viene già fornito con una
‫serie di strumenti di convalida pronti all'uso.
‫E quindi, ora eseguiamo un po' di convalida dei dati qui.
‫E in realtà, l'abbiamo già fatto.
‫Quindi, quando abbiamo usato questo require qui, in realtà è
‫già un validatore di dati integrato, va bene?
‫Quindi vedi che usiamo un validatore come richiesto proprio
‫qui nelle opzioni del tipo di schema.
‫E require è effettivamente disponibile per tutti i tipi di dati.
‫Quindi, non solo le stringhe, ma davvero tutto.
‫Numeri, booleani, date o qualsiasi tipo
‫tu stia utilizzando.
‫Quindi abbiamo anche qui univoco, ma tieni
‫presente che questo è in realtà, tecnicamente, non un validatore.
‫Produrrà ancora un errore
‫quando avremo un nome duplicato, ma ancora
‫una volta, questo non è davvero un validatore, va bene?
‫Ma è richiesto un validatore, quindi ora
‫te ne mostrerò un altro che
‫è specifico solo per le
‫stringhe, che si chiama lunghezza massima e anche lunghezza minima.
‫Quindi, abbiamo la lunghezza
‫massima e, come dice il nome, la usiamo
‫per specificare la lunghezza massima che può avere una stringa.
‫E se è più lungo,
‫beh, allora produrrà un errore, ok?
‫Quindi, facciamolo come abbiamo fatto prima con require,
‫dove abbiamo specificato un array, e poi abbiamo impostato il valore.
‫Quindi, diciamo che vogliamo 40 come lunghezza massima della
‫stringa, e poi aggiungiamo l'errore dopo.
‫Quindi, fondamentalmente, il messaggio di errore che otteniamo.
‫Quindi, il nome di un tour deve contenere
‫meno o uguale a 40 caratteri.
‫Ok, questa è la lunghezza massima, e
‫poi abbiamo anche la lunghezza minima.
‫Va bene, quindi impostiamo quello da uno a 10, quindi
‫il nome di un tour deve avere più o uguale a 10 caratteri.
‫Ok, così abbiamo questi due validatori che in realtà
‫sono disponibili solo su stringhe, ok?
‫E quindi ora andiamo avanti e proviamolo.
‫Quindi, ho intenzione di creare un nuovo tour qui.
‫E questo non è un tour
‫segreto, ma poi qui il resto non importa.
‫Lo chiamerò solo un Test Tour, e
‫vediamo quanti personaggi abbiamo, quindi
‫quattro più uno più quattro, quindi
‫abbiamo solo nove personaggi.
‫E quindi, ora dovremmo aspettarci di ricevere effettivamente un errore.
‫Quindi, proviamolo.
‫E, infatti, un nome di tour
‫deve avere più o uguale a 10 caratteri.
‫Fantastico, ma ora che ne dici di aggiornare i tour?
‫Quindi, prendiamo uno di questi qui.
‫Quindi, abbiamo questo tour di prova due qui, quindi
‫proviamo ad aggiornare questo.
‫Quindi, andiamo al nostro percorso di aggiornamento del tour.
‫E ora andiamo qui, cambiamo il nome in Test, inviamo
‫la richiesta e otteniamo lo stesso errore.
‫Ora, questo funziona solo a causa di
‫un'impostazione che abbiamo impostato
‫molto indietro, quando abbiamo implementato questo gestore di aggiornamento.
‫Quindi, lascia che te lo mostri rapidamente nel controller del tour.
‫Elimina e aggiorna, quindi è a causa di
‫questa opzione qui runValidators, impostata su
‫true che i validatori vengono eseguiti di nuovo.
‫Se lo metto
‫ora su false, allora Mongoose dovrebbe accettare felicemente questo nome.
‫E infatti, lo fa, va bene.
‫Quindi, riportiamolo su qualcosa di
‫più lungo,
‫non importa, ok, e se lo riporto su
‫true, allora non dovrebbe accettarlo,
‫e infatti, otteniamo il nostro errore indietro, va bene?
‫Quindi, volevo solo
‫mostrarti rapidamente il fatto di quell'impostazione.
‫Va bene, quindi, sì, ora funzionano.
‫Proviamo un paio di altri validatori qui.
‫Ad esempio, ora sui numeri.
‫Quindi, andiamo qui alla media delle valutazioni.
‫E sappiamo che il punteggio
‫deve essere sempre compreso tra uno e zero, e sappiamo che un
‫punteggio deve essere sempre compreso tra uno e cinque, ok?
‫E così, molto simile alla lunghezza minima e massima,
‫sui numeri abbiamo semplicemente minimo e massimo.
‫Quindi, il minimo che vogliamo è uno, e poi di
‫nuovo il nostro messaggio di errore.
‫Quindi, la valutazione deve essere superiore a 1. 0, diciamo.
‫E poi il massimo è cinque.
‫Deve essere inferiore a 5. 0, ok, e testiamo
‫rapidamente anche questo.
‫Quindi, creando un nuovo tour, chiamiamolo Test Tour Amazing
‫perché ha una valutazione media di sei.
‫Ok, allora vediamo cosa succede, e in
‫effetti, il punteggio deve essere inferiore a cinque.
‫Ok, quindi, anche questo non funzionerà,
‫e ovviamente non può nemmeno essere zero.
‫Quindi, deve essere sopra uno, e
‫ovviamente, con quattro, funzionerà, e infatti, ecco il nostro tour.
‫Successivamente, voglio limitare questo valore di difficoltà qui
‫a sole tre difficoltà.
‫Quindi, facile, medio e difficile.
‫E se l'utente inserisce
‫qualcos'altro, non funzionerà.
‫Quindi, proviamolo.
‫Quindi, il validatore che usiamo per questo si chiama enum, okay,
‫e quindi qui possiamo passare un
‫array dei valori, in pratica, che sono consentiti.
‫Quindi, abbiamo facile, abbiamo medio e abbiamo difficile.
‫Bene, ora vogliamo anche specificare il nostro messaggio di errore qui,
‫ma in questo momento non è proprio possibile, giusto?
‫Voglio dire, se aggiungessimo un altro argomento qui,
‫allora non sarebbe per
‫il messaggio di errore, sarebbe ovviamente per un altro possibile valore, ok?
‫E quindi, la soluzione che dobbiamo
‫fare qui è creare ancora un altro oggetto
‫qui e quindi specificare effettivamente che questi qui sono i valori.
‫E poi, il nostro messaggio, va bene?
‫E così, è così che funziona davvero.
‫Questa notazione qui è davvero solo
‫una scorciatoia per questo oggetto completo qui, va bene?
‫Quindi, la difficoltà è: facile, media o difficile.
‫Ok, questo è un validatore molto carino e molto utile che è automaticamente
‫disponibile su tutte le stringhe, ok, quindi, non provare
‫a usarlo qui sui numeri, per esempio.
‫Questo è solo per le stringhe.
‫E, comunque, questo minimo e massimo qui in
‫realtà non è solo per
‫i numeri, ma funzionerà anche con le date, va bene?
‫Comunque, ora finalmente proviamo anche questo.
‫Quindi, dobbiamo cambiare il nome, e
‫qui mettiamo qualcos'altro, va
‫bene, e così effettivamente, otteniamo il nostro errore.
‫Se ora mettiamo easy, allora funziona.
‫Ok, e in realtà è tutto quello che
‫volevo mostrarti qui in
‫questa conferenza, ma in realtà ci sono un sacco di altri validatori.
‫Ad esempio, sulle stringhe hai un validatore di
‫corrispondenza per verificare se
‫l'input corrisponde a una determinata espressione regolare.
‫Ma credo che questi che ti ho appena mostrato
‫qui siano i più importanti validatori incorporati.
‫E, per un elenco completo
‫di tutti, ovviamente, puoi sempre consultare la documentazione.
‫Ora possiamo anche specificare i nostri validatori, e
‫quindi è esattamente quello che faremo
‫nel prossimo video.