﻿1
00:00:00,860 --> 00:00:03,680
‫Istruttore: Bentornato, ora prima di approfondire la

2
00:00:03,680 --> 00:00:06,820
‫gestione degli errori, scriviamo prima un gestore

3
00:00:06,820 --> 00:00:09,430
‫per le rotte non definite.

4
00:00:09,430 --> 00:00:12,250
‫Quindi fondamentalmente per le rotte a cui non abbiamo ancora

5
00:00:12,250 --> 00:00:13,403
‫assegnato alcun gestore.

6
00:00:14,800 --> 00:00:17,820
‫E per prima cosa, dobbiamo avviare la nostra applicazione

7
00:00:17,820 --> 00:00:21,053
‫qui che non abbiamo chiuso dopo la recente sessione di debug.

8
00:00:21,950 --> 00:00:23,363
‫Quindi MPM inizia.

9
00:00:25,260 --> 00:00:28,290
‫E quindi aspettiamo una connessione al database.

10
00:00:28,290 --> 00:00:33,290
‫Eccolo, e quindi ora andiamo da Postman qui e proviamo a percorrere

11
00:00:33,640 --> 00:00:36,810
‫la via che non abbiamo ancora definito.

12
00:00:36,810 --> 00:00:39,793
‫Quindi vado avanti, copio questo URL

13
00:00:41,892 --> 00:00:44,260
‫qui, va bene, e

14
00:00:44,260 --> 00:00:46,410
‫quindi per esempio diciamo

15
00:00:48,240 --> 00:00:49,490
‫che

16
00:00:49,490 --> 00:00:53,223
‫invece di tour apiV1, diremmo solo api/tours.

17
00:00:54,140 --> 00:00:58,400
‫Ok, in quel caso otterremmo questo risultato HTML, va bene,

18
00:00:58,400 --> 00:01:01,470
‫quindi Express invia automaticamente questo codice

19
00:01:01,470 --> 00:01:05,380
‫HTML qui, insieme a un codice di errore 404

20
00:01:05,380 --> 00:01:08,700
‫Not Found nel caso in cui non

21
00:01:08,700 --> 00:01:12,900
‫ci sia alcun gestore per il percorso richiesto, ok.

22
00:01:12,900 --> 00:01:16,483
‫Oppure, potremmo anche semplicemente scrivere in modo errato tour qui, ad esempio.

23
00:01:17,640 --> 00:01:19,850
‫Quindi, ad esempio, in questo caso

24
00:01:19,850 --> 00:01:21,840
‫otterremmo ancora lo stesso errore.

25
00:01:21,840 --> 00:01:25,210
‫Ora c'è anche un'altra situazione che è

26
00:01:25,210 --> 00:01:29,580
‫se qui dopo i tour specifichiamo qualcos'altro, diciamo solo

27
00:01:29,580 --> 00:01:31,800
‫qualcosa del genere.

28
00:01:31,800 --> 00:01:34,790
‫E quindi diamo un'occhiata all'errore che otteniamo, e

29
00:01:34,790 --> 00:01:38,470
‫quindi ora otteniamo che il cast all'ID oggetto non è riuscito.

30
00:01:38,470 --> 00:01:40,560
‫E questo perché in realtà

31
00:01:40,560 --> 00:01:45,390
‫abbiamo un percorso che accetta un parametro ID qui dopo il tour/, giusto.

32
00:01:45,390 --> 00:01:48,770
‫E quindi MongoDB sta fondamentalmente cercando di trovare un

33
00:01:48,770 --> 00:01:53,180
‫documento con questo ID, ma non può convertirlo in un ID oggetto

34
00:01:53,180 --> 00:01:55,160
‫MongoDB valido, va bene.

35
00:01:55,160 --> 00:01:58,810
‫Quindi di nuovo questa è una situazione diversa, continuiamo a

36
00:01:59,820 --> 00:02:02,930
‫lavorare con questo, quindi di nuovo, dove otteniamo questo

37
00:02:02,930 --> 00:02:05,550
‫errore ma in questo modulo HTML.

38
00:02:05,550 --> 00:02:08,330
‫Ora, dal momento che stiamo creando un'API

39
00:02:08,330 --> 00:02:12,070
‫qui, non ha molto senso inviare HTML, giusto, quindi ora risolviamo

40
00:02:12,070 --> 00:02:15,400
‫questo problema e fondamentalmente creiamo una funzione di gestione per

41
00:02:15,400 --> 00:02:19,270
‫tutte le rotte che non sono memorizzate nella cache dai nostri router.

42
00:02:19,270 --> 00:02:22,610
‫Ok, torniamo alla nostra applicazione qui e

43
00:02:22,610 --> 00:02:25,540
‫apriamo l'app. js.

44
00:02:25,540 --> 00:02:27,950
‫Ok, questa è fondamentalmente la definizione

45
00:02:27,950 --> 00:02:30,180
‫della nostra applicazione Express.

46
00:02:30,180 --> 00:02:32,530
‫Ora, prima di fare qualsiasi altra cosa,

47
00:02:32,530 --> 00:02:35,190
‫liberiamoci di questo middleware qui di cui non

48
00:02:35,190 --> 00:02:36,700
‫abbiamo più bisogno.

49
00:02:36,700 --> 00:02:39,360
‫Quindi l'abbiamo usato qui solo per dimostrare

50
00:02:39,360 --> 00:02:43,160
‫il concetto di middleware, e quindi a questo punto non

51
00:02:43,160 --> 00:02:45,080
‫ne abbiamo più bisogno.

52
00:02:45,080 --> 00:02:47,980
‫Bene, ora come implementeremo un gestore di rotte per

53
00:02:47,980 --> 00:02:51,410
‫una rotta che non è stata memorizzata nella cache da nessuno

54
00:02:51,410 --> 00:02:53,380
‫dei nostri altri gestori di rotte?

55
00:02:53,380 --> 00:02:56,160
‫Quindi, per farlo, ricorda che tutte queste funzioni

56
00:02:56,160 --> 00:02:59,770
‫del middleware vengono eseguite nell'ordine in cui si trovano nel codice.

57
00:02:59,770 --> 00:03:02,930
‫E quindi l'idea è che se abbiamo una

58
00:03:02,930 --> 00:03:06,210
‫richiesta che rientra in questo punto qui del nostro

59
00:03:06,210 --> 00:03:08,760
‫codice, significa che né il tourRouter

60
00:03:08,760 --> 00:03:12,860
‫né l'userRouter sono stati in grado di memorizzarlo nella cache, ok.

61
00:03:12,860 --> 00:03:16,590
‫Quindi, se aggiungiamo un middleware qui dopo questi router, verrà

62
00:03:16,590 --> 00:03:20,060
‫raggiunto di nuovo solo se non gestito da nessuno

63
00:03:20,060 --> 00:03:22,470
‫dei nostri altri router, ok.

64
00:03:22,470 --> 00:03:25,610
‫Quindi facciamolo e poi capiamo davvero come funziona dopo

65
00:03:25,610 --> 00:03:27,550
‫che è già stato implementato.

66
00:03:27,550 --> 00:03:29,600
‫Quindi implementeremo un gestore di route e

67
00:03:29,600 --> 00:03:30,923
‫quindi diciamo app.

68
00:03:32,450 --> 00:03:34,540
‫e ora il metodo HTTP per il

69
00:03:34,540 --> 00:03:36,380
‫quale vogliamo specificare il percorso.

70
00:03:36,380 --> 00:03:40,630
‫Ora potremmo usare get here right, quindi proprio come abbiamo fatto prima,

71
00:03:40,630 --> 00:03:43,410
‫ma poi per quanto riguarda le richieste di

72
00:03:43,410 --> 00:03:45,030
‫pubblicazione, eliminazione o patch?

73
00:03:45,030 --> 00:03:47,730
‫Dovresti quindi scrivere gestori anche per questi, e

74
00:03:47,730 --> 00:03:50,190
‫non lo vogliamo, vogliamo semplicemente gestire tutti

75
00:03:50,190 --> 00:03:54,270
‫i percorsi, quindi tutti gli URL, per tutti i verbi proprio

76
00:03:54,270 --> 00:03:56,707
‫qui in questo gestore, ok.

77
00:03:56,707 --> 00:03:59,710
‫E così in Express, possiamo usare app. tutto.

78
00:03:59,710 --> 00:04:02,460
‫E quindi verrà eseguito per tutti i

79
00:04:02,460 --> 00:04:05,430
‫verbi, quindi tutto il metodo HTTP, va bene.

80
00:04:05,430 --> 00:04:08,270
‫Successivamente specifichiamo l'URL, e poiché qui vogliamo gestire

81
00:04:08,270 --> 00:04:10,920
‫tutti gli URL che non sono stati

82
00:04:10,920 --> 00:04:13,950
‫gestiti prima di poter usare la stella qui, che

83
00:04:13,950 --> 00:04:17,320
‫sta per tutto, va bene, e poi il resto è

84
00:04:17,320 --> 00:04:19,920
‫solo una normale funzione middleware , proprio

85
00:04:19,920 --> 00:04:21,183
‫come prima.

86
00:04:23,980 --> 00:04:24,893
‫Quindi richiesta,

87
00:04:26,210 --> 00:04:27,883
‫risposta e il prossimo.

88
00:04:29,270 --> 00:04:32,290
‫Ok, e cosa vogliamo fare qui?

89
00:04:32,290 --> 00:04:34,700
‫Bene, vogliamo semplicemente inviare una risposta

90
00:04:34,700 --> 00:04:38,653
‫in formato JSON, quindi non l'HTML che abbiamo in questo momento.

91
00:04:40,100 --> 00:04:41,573
‫Quindi ris. status,

92
00:04:43,100 --> 00:04:46,110
‫e qui impostiamo un 404, quindi Not Found

93
00:04:48,220 --> 00:04:52,190
‫e quindi una risposta JSON, quindi proprio come il solito in

94
00:04:52,190 --> 00:04:54,343
‫cui impostiamo lo stato su fail.

95
00:04:57,090 --> 00:05:01,153
‫Quindi solo una normale risposta formattata adiacente.

96
00:05:03,590 --> 00:05:05,980
‫E poi una sorta di messaggio qui, e in

97
00:05:05,980 --> 00:05:07,580
‫realtà facciamo una stringa modello

98
00:05:07,580 --> 00:05:09,790
‫qui, perché voglio mettere una variabile lì dentro.

99
00:05:09,790 --> 00:05:11,370
‫Quindi non posso,

100
00:05:11,370 --> 00:05:12,203
‫trova.

101
00:05:13,380 --> 00:05:16,650
‫E poi possiamo usare req. originalUrl va bene, quindi

102
00:05:18,220 --> 00:05:21,900
‫questa è una proprietà che abbiamo sulla richiesta che

103
00:05:21,900 --> 00:05:26,233
‫è come dice il nome, l'URL che è stato richiesto, va

104
00:05:27,300 --> 00:05:28,270
‫bene.

105
00:05:28,270 --> 00:05:30,610
‫Quindi questa nuova risposta che

106
00:05:30,610 --> 00:05:33,230
‫invieremo indietro ora è molto migliore

107
00:05:33,230 --> 00:05:37,163
‫dell'HTML che stavamo ricevendo in precedenza, quindi ora proviamolo.

108
00:05:40,440 --> 00:05:44,020
‫E infatti, ora riceviamo un messaggio di errore JSON qui.

109
00:05:44,020 --> 00:05:47,970
‫E quindi qui otteniamo anche l'URL che è stato richiesto, e

110
00:05:47,970 --> 00:05:50,586
‫in effetti è quello a cui

111
00:05:50,586 --> 00:05:54,760
‫abbiamo provato ad accedere, ma non è disponibile, va bene, fantastico.

112
00:05:54,760 --> 00:05:57,240
‫Ora di nuovo, perché ha funzionato?

113
00:05:57,240 --> 00:06:01,200
‫Quindi, di nuovo, l'idea è che se siamo in grado di raggiungere

114
00:06:01,200 --> 00:06:04,120
‫questo punto qui, significa che il ciclo di risposta

115
00:06:04,120 --> 00:06:06,281
‫alla richiesta non era ancora

116
00:06:06,281 --> 00:06:09,100
‫terminato a questo punto nel nostro codice, giusto.

117
00:06:09,100 --> 00:06:11,780
‫Perché ricorda che il middleware viene aggiunto allo

118
00:06:11,780 --> 00:06:14,040
‫stack del middleware nell'ordine in cui è

119
00:06:14,040 --> 00:06:16,010
‫definito qui nel nostro codice.

120
00:06:16,010 --> 00:06:18,810
‫E quindi fondamentalmente questo codice qui viene eseguito per

121
00:06:18,810 --> 00:06:21,840
‫primo, e quindi se il percorso fosse abbinato qui

122
00:06:21,840 --> 00:06:25,230
‫nel nostro tourRouter, la nostra richiesta non raggiungerebbe nemmeno questo codice

123
00:06:25,230 --> 00:06:27,660
‫e quindi questo non verrebbe eseguito.

124
00:06:27,660 --> 00:06:30,050
‫E quindi questa dovrebbe essere fondamentalmente l'ultima

125
00:06:30,050 --> 00:06:32,560
‫parte dopo tutte le nostre altre vie, d'accordo.

126
00:06:32,560 --> 00:06:35,240
‫E se lo fossi,

127
00:06:35,240 --> 00:06:38,140
‫solo per provarlo, ora mettilo in

128
00:06:39,230 --> 00:06:43,260
‫cima alla nostra applicazione, allora vedrai che non

129
00:06:43,260 --> 00:06:47,750
‫importa quale richiesta faremo, otterremo sempre la stessa risposta.

130
00:06:47,750 --> 00:06:49,653
‫Bene, quindi proviamolo, e

131
00:06:51,550 --> 00:06:54,600
‫in effetti ora riceviamo il messaggio di errore

132
00:06:54,600 --> 00:06:56,600
‫JS, e questo perché tutte le

133
00:06:56,600 --> 00:06:59,850
‫richieste ora raggiungono questo gestore di route qui, ed

134
00:06:59,850 --> 00:07:04,290
‫è effettivamente abbinato perché è una richiesta GET, che fa parte di tutti

135
00:07:04,290 --> 00:07:08,060
‫i verbi, giusto, e quindi tutti i percorsi, quindi tutti gli

136
00:07:08,060 --> 00:07:10,760
‫URL sono memorizzati nella cache qui, e

137
00:07:10,760 --> 00:07:13,920
‫quindi ovviamente gestisce quell'URL che abbiamo appena fatto qui.

138
00:07:13,920 --> 00:07:17,333
‫E lo stesso ovviamente, ad esempio per un tour di eliminazione.

139
00:07:18,330 --> 00:07:20,590
‫Quindi accadrebbe la stessa cosa, otterremmo

140
00:07:20,590 --> 00:07:22,573
‫sempre la stessa risposta, va

141
00:07:23,740 --> 00:07:24,573
‫bene.

142
00:07:25,430 --> 00:07:28,500
‫Quindi, ovviamente, rimettiamolo a posto,

143
00:07:28,500 --> 00:07:33,183
‫ma questo era solo per dimostrare come e perché

144
00:07:34,100 --> 00:07:35,670
‫funziona, d'accordo.

145
00:07:35,670 --> 00:07:38,890
‫Ottimo, quindi questa è una parte importante per rendere la

146
00:07:38,890 --> 00:07:42,150
‫nostra API un po' più user friendly, ma ora iniziamo

147
00:07:42,150 --> 00:07:44,873
‫a conoscere la gestione degli errori reali.

