‫Istruttore maschio: Infine, gestiamo
‫ora gli errori di convalida di Mongoose.
‫Quindi ricordi come abbiamo provato ad aggiornare un tour con
‫alcuni dati non validi qui,
‫e poi abbiamo ottenuto questo tipo di errore?
‫Bene.
‫E in realtà proviamo ad aggiungerne un altro.
‫Quindi un nome davvero corto, ok?
‫E perché non è permesso, di nuovo.
‫Oh, e ora in realtà non possiamo più vedere il
‫nostro errore perché ora siamo in produzione.
‫E ovviamente questo errore in questo
‫momento non viene gestito correttamente.
‫Non è contrassegnato come operativo.
‫E
‫quindi, ricorda che riceviamo questo tipo di messaggio di errore generico.
‫Bene?
‫Quindi, solo per vedere l'errore che abbiamo avuto prima,
‫torniamo rapidamente allo sviluppo.
‫Quindi npm inizia.
‫E invialo di
‫nuovo ora.
‫E così ora riprendiamo i nostri errori di sviluppo, ok?
‫Perché ora voglio
‫mostrarti come possiamo effettivamente creare un messaggio di errore significativo
‫basato su tutto questo, quello che abbiamo qui.
‫Ora giusto.
‫Quindi all'interno del nostro
‫errore, otteniamo una proprietà di errore.
‫E quella proprietà stessa è un
‫oggetto che contiene molti oggetti, e ognuno
‫di essi è per uno dei campi che contiene un errore.
‫Tutto ok?
‫Quindi il primo qui è per la durata del tour.
‫Poi la seconda è per la difficoltà,
‫anche quella è sbagliata.
‫E il terzo è per la valutazione, ok?
‫Quindi ognuno di questi ha effettivamente un bel messaggio di errore, ok?
‫Quindi sostanzialmente quello che abbiamo definito nel nostro schema Mongoose.
‫E quindi ora vogliamo estrarre
‫questi tre messaggi da
‫qui e metterli tutti in un'unica stringa, ok?
‫Quindi andiamo avanti e facciamolo.
‫Bene.
‫E ancora,
‫inizierò creando effettivamente il condizionale qui sotto.
‫Quindi se
‫(errore), e in realtà diamo un'occhiata.
‫Quindi qui abbiamo l'errore.
‫Abbiamo gli errori, tutti.
‫E ho bisogno di scorrere qui.
‫E sì, quindi ecco il nome.
‫Quindi errore. il nome è ValidationError, va bene?
‫Quindi prendiamolo.
‫Bene.
‫E quindi anche questo è un errore creato da Mongoose.
‫Quindi proprio come
‫il primo, e quindi sembrano simili, ok.
‫Ora non voglio questo qui.
‫Ma invece
‫voglio che l'errore sia uguale a
‫handleValidationErrorDB e invii l'errore, ok?
‫Ora copiamo questo di nuovo.
‫Tutto bene.
‫E ricominciamo, iniziamo semplicemente creando il nostro messaggio.
‫Dati di input non validi.
‫E poi restituiamo anche l'errore.
‫Quindi nuovo AppError (messaggio, 400).
‫Quindi VS Code ha
‫già riconosciuto che volevo digitare proprio quello, va bene?
‫Ora, per creare una stringa
‫grande da tutte le stringhe di tutti gli
‫errori, dobbiamo fondamentalmente eseguire il ciclo su tutti
‫questi oggetti e quindi estrarre tutti i messaggi di errore in un nuovo array.
‫Quindi, di nuovo, diamo un'occhiata a questo.
‫Bene.
‫Quindi l'oggetto che contiene tutti gli
‫oggetti contiene errori, ok?
‫Quindi abbiamo un errore per il nome, uno per la
‫difficoltà e uno per la media delle valutazioni.
‫E quindi fondamentalmente eseguiremo il loop su questo oggetto degli errori.
‫Bene?
‫E in JavaScript, usiamo Object. valori per
‫eseguire fondamentalmente il ciclo su un oggetto.
‫Quindi gli elementi di un oggetto.
‫Tutto ok?
‫Quindi creiamo una variabile qui chiamata errori, che sarà di
‫nuovo un array di tutti
‫i messaggi di errore per ora,
‫e ora Object. i valori.
‫E quindi vogliamo i valori di err. errori, va bene?
‫E ora passaci sopra usando una mappa.
‫E poi in
‫ogni iterazione, restituiremo semplicemente il messaggio di errore, ok?
‫Quindi, solo per essere sicuri che siamo tutti sulla
‫stessa pagina qui, l'Oggetto. i valori sono questi oggetti, ok?
‫Quindi questo oggetto, e questo oggetto, e il prossimo, ok?
‫Quindi questi sono i valori.
‫E quindi ora
‫tutto ciò che dobbiamo fare per estrarre
‫il messaggio, è dire valore. messaggio, ok?
‫Così . Messaggio.
‫Quindi fondamentalmente il valore corrente, o
‫diciamo l'elemento corrente,
‫mi piace usare l'elemento per quello
‫e vogliamo restituire el. Messaggio.
‫Bene.
‫E ora, ovviamente, questo non dovrebbe essere qui.
‫E probabilmente lo avevi già notato.
‫Quindi, in effetti, è qui che lo vogliamo, ok?
‫E quindi ora tutto
‫ciò che dobbiamo fare è inserirlo nella nostra stringa di messaggi, ok?
‫Quindi errori, e ora li uniamo semplicemente tutti insieme
‫in un'unica stringa usando il punto e poi lo spazio, ok?
‫E vedrai, in un secondo, perché è così.
‫Tutto bene.
‫Quindi torniamo alla produzione qui.
‫Quindi eseguendo il nostro script di avvio della produzione.
‫Riprova ora e aspettiamo, e
‫bam!
‫Eccoci qui!
‫Quindi dati di input non validi.
‫Quindi la prima stringa di errore, deve avere
‫più o uguale a 10 caratteri.
‫Poi il
‫secondo, e il terzo.
‫Perfetto.
‫Ed è per questo che ho usato il punto e lo spazio, ok?
‫Quindi, per separare sostanzialmente queste tre stringhe con un
‫punto e uno spazio, va bene?
‫E ora questo sembra un messaggio di
‫errore molto ben formattato che tutti possono facilmente capire.
‫Destra?
‫Quindi, abbiamo praticamente finito qui.
‫Tutto bene.
‫Ora avremmo potuto fare questo errore, gestendo
‫l'errore, ancora molto più completo.
‫Ad esempio, potremmo definire diversi livelli di gravità dell'errore come dire, questo
‫errore non è così importante, questo errore
‫è di media importanza
‫e questo errore è molto importante o addirittura critico.
‫E potremmo anche inviare un'e-mail ad alcuni amministratori
‫sugli errori critici.
‫E davvero, ci sono molte cose che potremmo implementare.
‫Ma ancora una volta, in una specie di piccola applicazione come questa,
‫quello che abbiamo qui è già davvero buono, ok?
‫Quindi questa è già una strategia abbastanza
‫solida che abbiamo
‫implementato qui, e ne sono davvero contento, ok?
‫Quindi tutta questa logica qui con gli errori operativi
‫che abbiamo implementato
‫qui, quindi è già abbastanza sofisticata.
‫Bene?
‫Ora, se dovessimo mai trovare un altro errore
‫che vogliamo contrassegnare come operativo, ovviamente
‫tutto ciò che dovremmo fare
‫è qualcosa di simile a quello che abbiamo qui, ok?
‫Quindi fondamentalmente implementare un'altra funzione per quella, e quindi
‫restituire il nostro errore operativo in
‫modo che la produzione dell'errore
‫di invio possa effettivamente inviare quell'errore operativo
‫al client, giusto?
‫Ok, e detto questo, il
‫nostro controller di errore è effettivamente finito.
‫Ma ci sono ancora alcuni altri errori che dobbiamo
‫gestire che sono completamente al di fuori di Mongo o anche di Express.
‫E così lo faremo nel resto di questa sezione.