‫Istruttore: Parliamo ora di validatori personalizzati.
‫Quindi a volte i validatori integrati semplicemente non sono sufficienti.
‫E in
‫tal caso, possiamo anche creare i nostri validatori personalizzati.
‫E un validatore è in realtà solo una semplice funzione
‫che dovrebbe restituire true o false.
‫E se restituisce false, significa che c'è un errore.
‫E d'altra parte quando restituiamo
‫true, la convalida è
‫corretta e l'input può essere accettato.
‫Ok, ora costruiamo qui un semplice validatore personalizzato.
‫E quello che voglio convalidare è se lo sconto sul prezzo
‫è effettivamente inferiore al prezzo stesso.
‫È qualcosa che non
‫possiamo fare usando i validatori incorporati
‫e quindi creeremo semplicemente il nostro.
‫Dobbiamo ora specificare qui un oggetto
‫per le opzioni SchemaType.
‫Bene.
‫Quindi il tipo è numero,
‫quindi per specificare il nostro validatore
‫usiamo la proprietà validate.
‫Convalida, e poi come ho detto, una
‫semplice funzione di callback.
‫E ancora, non una funzione freccia,
‫ma una funzione
‫reale, perché
‫in questa funzione avremo accesso a questa
‫variabile, che punterà al documento corrente.
‫Ora, se non hai bisogno di questa variabile,
‫puoi ovviamente usare solo una funzione freccia.
‫Abbiamo una funzione
‫di callback e quella funzione di callback ha effettivamente
‫accesso al valore che è stato immesso.
‫Quindi, in questo caso, lo sconto sul prezzo specificato dall'utente.
‫Quindi è quello che chiamo il valore, val in breve.
‫Ricorda che dobbiamo restituire
‫true o false da questo validatore.
‫Quando vogliamo restituire
‫false e quando vogliamo restituire true?
‫Bene, vogliamo un errore quando lo sconto sul prezzo
‫è maggiore o uguale al prezzo.
‫E quindi fondamentalmente ciò che vogliamo restituire
‫qui è il test di testing se il
‫valore è inferiore a questo. prezzo.
‫Va bene, quindi diciamo che lo sconto sul prezzo è
‫100 e che il prezzo reale è 200.
‫100 è minore di 200, vero e quindi non abbiamo errori.
‫E questo ha senso perché è esattamente quello che vogliamo.
‫Lo sconto sul prezzo dovrebbe essere sempre inferiore.
‫Se invece lo sconto è 250, allora questo
‫si rivela falso.
‫E poi false, ricorda, attiverà un errore di convalida.
‫Ora proviamolo in realtà.
‫Prezzo
‫(clack della tastiera) e sconto
‫sul prezzo.
‫E usiamo i valori che abbiamo usato
‫prima e ho anche bisogno di cambiare il nome qui.
‫Ok, quindi in questo momento il nostro sconto è maggiore del prezzo e quindi
‫dovremmo ottenere il nostro errore.
‫Ok e in effetti, abbiamo un errore di convalida.
‫Quindi fallito per lo sconto sul prezzo del percorso.
‫Ora, non abbiamo alcun messaggio personalizzato qui
‫e quindi risolviamolo rapidamente.
‫Va bene e il modo in cui lo facciamo è molto simile
‫a quello che abbiamo fatto con l'enum.
‫Quindi dobbiamo effettivamente specificare un altro oggetto e quindi
‫impostare la proprietà del messaggio.
‫Validate
‫dovrebbe essere un oggetto
‫e quindi abbiamo il nostro messaggio
‫lì e questa funzione qui vivrà
‫in una proprietà chiamata validator.
‫Va bene e il nostro messaggio
‫qui sarà (clack della tastiera) il prezzo di
‫sconto dovrebbe
‫essere
‫inferiore al prezzo normale.
‫Qui abbiamo bisogno di una virgola e quindi ora siamo a posto.
‫E in realtà, un trucco molto carino è che anche questo
‫messaggio qui ha accesso al valore.
‫E questo funziona in un modo strano e
‫questo è davvero interno a Mongoose, quindi
‫non ha nulla a che
‫fare con JavaScript, quindi posso semplicemente usare le parentesi graffe qui e quindi valore.
‫Quindi questo pezzo qui avrà accesso al
‫valore che è stato inserito,
‫quindi ha esattamente lo stesso valore di questa variabile val.
‫Quindi proviamolo
‫di nuovo e ora effettivamente riceviamo
‫il nostro messaggio e accediamo anche al prezzo di 250 che abbiamo specificato qui.
‫Ora cambiamo in 100 e quindi ora dovrebbe funzionare
‫e sì, lo fa.
‫Quindi, fantastico.
‫Ora c'è un avvertimento molto importante che
‫dobbiamo notare qui ed è
‫che all'interno di una funzione di convalida,
‫questa parola chiave indicherà solo il
‫documento corrente
‫quando stiamo creando un nuovo documento.
‫Quindi questa funzione qui non funzionerà con l'aggiornamento.
‫E quindi questo è molto importante da notare.
‫Vedi, in Mongoose ci sono un paio di avvertimenti
‫di cui devi davvero essere
‫consapevole quando lavori con esso.
‫E ho imparato tutto questo per
‫esperienza ed è per questo che ora posso dirtelo.
‫Quindi mi imbatto in un errore una volta con questo
‫e quindi da
‫quel momento in poi, so che posso usare questo tipo
‫di validatore solo con una parola
‫chiave this quando sto effettivamente creando nuovi documenti.
‫Quindi lascia che te lo scriva qui.
‫(clack della tastiera) Va bene, quindi
‫spero che tu stia prendendo nota di
‫tutte queste piccole informazioni molto importanti che sono
‫molto importanti.
‫La stessa cosa quaggiù.
‫Ricorda che dove ti
‫ho detto che questo DOCUMENT MIDDLEWARE funziona solo per
‫salvare e creare ma non per aggiornare.
‫E questa è una di queste altre
‫cose che sono davvero importanti da non dimenticare mai.
‫Ora, in questo caso specifico
‫qui, ci sono in realtà dei modi per risolvere questo problema,
‫ma sono molto complicati e non vale davvero la pena seguirli.
‫E potremmo ovviamente anche scrivere funzioni di validazione
‫che non si basano su questa variabile.
‫Quindi, in questo caso, ne abbiamo bisogno solo
‫perché stiamo confrontando un valore con il valore di un altro campo.
‫Questo è un validatore personalizzato che possiamo usare in Mongoose
‫e che abbiamo effettivamente scritto noi stessi.
‫Ma ci sono anche un paio di librerie
‫su npm per la convalida dei dati che possiamo
‫semplicemente collegare qui come validatori personalizzati che non dobbiamo scrivere noi stessi.
‫E la libreria più popolare si chiama validator
‫e quindi diamo un'occhiata a quella.
‫Validator e poi sto cercando GitHub
‫perché di solito tutte queste librerie sono sempre su GitHub.
‫E ci sarà anche la documentazione, quindi
‫qui puoi vedere che
‫il validatore
‫è una libreria di validatori di stringhe e disinfettanti.
‫Vedi anche che è abbastanza popolare con 13,00 stelle
‫e quindi
‫è molto buono.
‫Vediamo anche che questa libreria convalida
‫e disinfetta solo le stringhe.
‫Ecco quindi tutte le cose su come lo
‫installiamo e come lo usiamo, ma è abbastanza semplice.
‫Lo sappiamo già.
‫Ma quello che voglio mostrarti
‫è l'elenco di tutti i validatori disponibili.
‫Ad esempio, abbiamo isAlpha, che
‫controllerà se la stringa contiene solo lettere.
‫Abbiamo alfanumerico, quindi solo lettere e numeri e abbiamo davvero
‫un sacco di cose qui.
‫Quindi controlla se una stringa è
‫booliana o controlla se la stringa è una carta di credito,
‫quindi un numero di carta di credito valido.
‫O se è una valuta
‫o vedi davvero tutti i tipi di test diversi.
‫Ad esempio un ISBN, quindi per controllare i numeri dei libri.
‫Per verificare se è un numero intero o se la stringa è minuscola.
‫E così vedi, ogni volta che hai bisogno di una convalida
‫dei dati puoi prendere una
‫di queste librerie e collegarle semplicemente ai tuoi validatori Mongoose.
‫Ora molte delle cose che
‫sono qui in realtà sono già
‫integrate in Mongoose e quindi non abbiamo bisogno di
‫tutte, okay, ma ce n'è una
‫molto specifica, che voglio usare, che è Alpha.
‫Quindi voglio controllare se il nome del tour contiene solo lettere.
‫E quindi per questo posso usare questa
‫funzione dalla libreria del validatore.
‫Torniamo
‫indietro e
‫iniziamo
‫installando il validatore
‫npm i (clacking
‫della tastiera).
‫Questo ha avuto successo.
‫Quindi ho bisogno di
‫importarlo qui e quindi ora siamo a posto per usarlo effettivamente qui.
‫Lo userò qui
‫e ancora, uso la proprietà validate e
‫ora tutto ciò che
‫devo fare è collegare davvero la funzione qui.
‫E in validator, funziona così, dove
‫validator è un oggetto
‫e lì abbiamo tutti questi metodi.
‫Validator è
‫Alpha,
‫quindi
‫è quello che
‫scegliamo dalla documentazione.
‫Ed è proprio così.
‫Quindi non lo chiamiamo qui.
‫In pratica, specifichiamo solo che
‫questa è una funzione che dovrebbe essere utilizzata.
‫Proprio come il nostro, come il nostro validatore, non
‫l'abbiamo chiamato.
‫Abbiamo semplicemente messo qui questa funzione di
‫callback che verrà
‫chiamata non appena i dati dovrebbero essere convalidati.
‫E quindi qui, è lo stesso.
‫Ora, se vogliamo specificare un messaggio di
‫errore, funziona proprio come qui sopra.
‫Possiamo specificare un array e quindi il messaggio di errore dopo
‫la funzione di callback.
‫E avremmo potuto farlo quaggiù.
‫Quindi qui lo abbiamo fatto in modo diverso.
‫Qui abbiamo quindi creato questo nuovo
‫oggetto con validatore e il messaggio, ma avremmo
‫potuto farlo anche con un array,
‫ma sarebbe sembrato strano.
‫Ma quassù, poiché la funzione è così piccola,
‫quindi questa è così piccola, possiamo semplicemente inserirla qui
‫e poi come secondo argomento nell'array aggiungere il
‫messaggio di errore.
‫Il nome del tour
‫deve contenere solo (clack della tastiera) caratteri.
‫Ottimo, dai un'occhiata.
‫Tornato qui a Postino, liberiamoci del nostro sconto sul prezzo.
‫E aggiungiamo qualche numero qui.
‫E così dovrebbe poi fallire
‫il test e infatti, il nome deve contenere solo caratteri.
‫Eliminiamolo.
‫Non possiamo nemmeno usare questo nome.
‫L'abbiamo già usato prima,
‫quindi può essere scritto anche qui con i
‫caratteri e riceviamo ancora questo errore qui.
‫Beh, probabilmente è a causa degli spazi.
‫Quindi sbarazziamoci degli spazi, che
‫ovviamente non saranno molto utili e
‫anzi, ora funziona.
‫Quindi il problema erano gli
‫spazi, ma ovviamente vogliamo mantenere gli spazi qui.
‫In effetti, questo errore di convalida non è molto utile e
‫quindi me ne libererò.
‫Considera che questo qui era solo per dimostrare che
‫possiamo usare una libreria esterna come questa
‫per eseguire la convalida.
‫E in effetti, utilizzeremo ancora questa libreria un
‫po' più tardi, quando controlleremo se l'e-mail dell'utente è effettivamente valida.
‫Quindi questa è un'altra
‫bella funzione inclusa in questa libreria.
‫Quindi, di nuovo, è così che funziona.
‫Non molto utile in questo
‫caso, quindi se volessimo
‫davvero verificare se la stringa contiene solo lettere e spazi,
‫sarebbe probabilmente
‫più semplice utilizzare semplicemente un'espressione regolare per
‫verificare quel tipo di pattern.
‫Ma non lo
‫farò qui perché questa lezione era
‫più su questi validatori personalizzati.
‫Comunque, con questa lezione, siamo ora pronti
‫con l'introduzione a Mongoose.
‫Ora, come puoi immaginare, c'è ovviamente
‫ancora molto da imparare su Mangusta
‫e infatti, abbiamo una sezione Mangusta avanzata un po'
‫più avanti nel
‫corso e, naturalmente, anche nelle altre
‫sezioni, continuerai a imparare sempre
‫di più su come usare
‫Mangusta in modo davvero professionale.
‫Hai già imparato così tanto fino a
‫questo punto, quindi grandi congratulazioni per essere arrivato così lontano ed
‫è bello vedere che sei ancora qui con me.
‫Quindi ottimo lavoro e spero di vederti presto.