﻿1
00:00:01,050 --> 00:00:02,840
‫Istruttore: Facciamo ora un ulteriore

2
00:00:02,840 --> 00:00:04,780
‫uso della nostra attività di classe

3
00:00:04,780 --> 00:00:07,400
‫AppError aggiungendo un paio di errori 404 e alcune

4
00:00:07,400 --> 00:00:09,493
‫delle nostre funzioni di gestione del tour.

5
00:00:10,446 --> 00:00:12,740
‫Ora, solo una cosa che

6
00:00:12,740 --> 00:00:16,030
‫volevo dire prima di implementare effettivamente questi errori

7
00:00:16,030 --> 00:00:19,640
‫404 è che ovviamente avremmo potuto usare la funzione

8
00:00:19,640 --> 00:00:22,290
‫catchAsync anche nel nostro router, ok?

9
00:00:22,290 --> 00:00:24,940
‫Quindi, lascia che ti mostri come funzionerebbe.

10
00:00:24,940 --> 00:00:27,090
‫Quindi, qui in

11
00:00:27,090 --> 00:00:29,730
‫TourRoutes, avrei potuto racchiudere questa

12
00:00:30,750 --> 00:00:34,530
‫funzione qui in catchAsync proprio come questo

13
00:00:34,530 --> 00:00:38,480
‫invece di farlo proprio qui nel controller.

14
00:00:38,480 --> 00:00:41,400
‫Quindi, qui dove l'ho fatto in effetti, giusto?

15
00:00:41,400 --> 00:00:44,200
‫E questo avrebbe avuto lo stesso identico

16
00:00:44,200 --> 00:00:45,950
‫risultato, ma non

17
00:00:45,950 --> 00:00:48,190
‫l'ho fatto in questo modo perché

18
00:00:48,190 --> 00:00:50,110
‫in questo modo devo ricordare

19
00:00:50,110 --> 00:00:52,350
‫quale di questi metodi qui

20
00:00:52,350 --> 00:00:54,800
‫è effettivamente un metodo di sincronizzazione, ok,

21
00:00:54,800 --> 00:00:58,960
‫quindi solo su quelli aggiungo effettivamente la funzione catchAsync , Giusto?

22
00:00:58,960 --> 00:01:02,150
‫Ora, in questo caso, in realtà sono tutte funzioni

23
00:01:02,150 --> 00:01:05,700
‫asincrone e quindi, non è proprio questo il problema qui

24
00:01:05,700 --> 00:01:07,530
‫in questo esempio, ma ci

25
00:01:07,530 --> 00:01:11,150
‫saranno alcuni esempi in seguito in cui non tutti i gestori

26
00:01:11,150 --> 00:01:12,170
‫sono funzioni

27
00:01:12,170 --> 00:01:14,020
‫asincrone e quindi, in quel

28
00:01:14,020 --> 00:01:17,100
‫caso, avrei davvero per ricordare quale di loro devo

29
00:01:17,100 --> 00:01:18,600
‫avvolgere in catchAsync

30
00:01:18,600 --> 00:01:20,450
‫e quali no e quindi,

31
00:01:20,450 --> 00:01:23,930
‫farlo nel controller è molto più semplice perché semplicemente ogni

32
00:01:23,930 --> 00:01:25,520
‫volta che scrivo una

33
00:01:25,520 --> 00:01:27,190
‫funzione asincrona qui, loro lo

34
00:01:27,190 --> 00:01:30,220
‫sanno già bene, ho bisogno di avvolgere in catchAsync.

35
00:01:30,220 --> 00:01:31,350
‫Bene.

36
00:01:31,350 --> 00:01:32,880
‫Quindi, non lo sto

37
00:01:32,880 --> 00:01:36,400
‫facendo qui, lo faccio solo come ti ho mostrato nell'ultimo video.

38
00:01:36,400 --> 00:01:39,680
‫Ok e in realtà una volta mi sono imbattuto in un

39
00:01:39,680 --> 00:01:41,330
‫bug che era davvero

40
00:01:41,330 --> 00:01:43,160
‫difficile da trovare perché in realtà

41
00:01:43,160 --> 00:01:45,690
‫ho inserito una funzione che non era asincrona in

42
00:01:45,690 --> 00:01:47,850
‫catchAsync e quindi non funzionavamo davvero e

43
00:01:47,850 --> 00:01:50,350
‫non riuscivo a capire dove fosse il bug e

44
00:01:50,350 --> 00:01:52,830
‫ho sprecato un sacco di tempo su quello.

45
00:01:52,830 --> 00:01:56,820
‫E così, da allora, non metto più catchAsync qui ma molto

46
00:01:56,820 --> 00:01:59,610
‫vicino a dove ne ho effettivamente bisogno,

47
00:01:59,610 --> 00:02:02,860
‫così vicino al codice che in realtà è asincrono.

48
00:02:02,860 --> 00:02:04,640
‫Ok, detto questo,

49
00:02:04,640 --> 00:02:07,820
‫ora implementiamo alcuni errori 404 qui.

50
00:02:07,820 --> 00:02:09,680
‫Bene, quindi voglio

51
00:02:09,680 --> 00:02:11,680
‫iniziare mostrandovi di nuovo l'esempio

52
00:02:11,680 --> 00:02:13,830
‫che abbiamo fatto nell'ultimo video.

53
00:02:13,830 --> 00:02:16,350
‫Ok, quindi abbiamo provato a fare un

54
00:02:16,350 --> 00:02:19,780
‫tour per questo strano ID che in realtà non

55
00:02:19,780 --> 00:02:20,989
‫esiste e

56
00:02:20,989 --> 00:02:23,690
‫l'errore che abbiamo ottenuto è che in

57
00:02:23,690 --> 00:02:26,410
‫pratica Mongoose non è riuscito a convertire

58
00:02:26,410 --> 00:02:29,630
‫questa stringa qui in un ID valido per MongoDB.

59
00:02:29,630 --> 00:02:33,653
‫Ma cosa succede quando utilizziamo effettivamente un ID MongoDB valido?

60
00:02:34,750 --> 00:02:38,003
‫Quindi, per esempio, copiamo questo qui, ok, e

61
00:02:38,003 --> 00:02:39,173
‫questo

62
00:02:41,660 --> 00:02:44,670
‫ovviamente avrà un risultato e quindi cambiamolo

63
00:02:44,670 --> 00:02:47,770
‫leggermente, quindi per esempio, cambiando questo a

64
00:02:47,770 --> 00:02:50,060
‫zero qui sarà ancora un

65
00:02:50,060 --> 00:02:52,340
‫ID valido , quindi sembra

66
00:02:52,340 --> 00:02:53,900
‫così e sembra

67
00:02:53,900 --> 00:02:56,000
‫esattamente lo stesso di prima,

68
00:02:56,000 --> 00:02:57,440
‫ho appena cambiato

69
00:02:57,440 --> 00:03:00,830
‫un numero ma questo ID probabilmente non esisterà.

70
00:03:00,830 --> 00:03:03,470
‫E quindi, vediamo cosa otteniamo allora.

71
00:03:03,470 --> 00:03:06,810
‫E infatti, ora il nostro risultato qui è nullo.

72
00:03:06,810 --> 00:03:10,340
‫Va bene, quindi non è proprio quello che vogliamo, vero?

73
00:03:10,340 --> 00:03:14,550
‫Quello che vogliamo qui è mostrare un codice di stato 404 qui e

74
00:03:14,550 --> 00:03:17,310
‫dire che questo tour non è stato trovato.

75
00:03:17,310 --> 00:03:20,750
‫Ok, ora usiamo la classe orAppError

76
00:03:20,750 --> 00:03:22,580
‫per implementarlo.

77
00:03:22,580 --> 00:03:24,040
‫Tieni solo a mente

78
00:03:24,040 --> 00:03:26,880
‫che il tour che facciamo qui è nullo, ok?

79
00:03:26,880 --> 00:03:29,453
‫Quindi, null che ora possiamo verificare.

80
00:03:30,920 --> 00:03:33,533
‫Quindi, se andiamo al nostro gestore getTour,

81
00:03:35,260 --> 00:03:40,260
‫implementiamo ora se non c'è tour e in quel caso creeremo un

82
00:03:41,030 --> 00:03:43,390
‫errore e questo qui funziona perché

83
00:03:44,410 --> 00:03:45,243
‫se

84
00:03:45,243 --> 00:03:46,650
‫non c'è tour,

85
00:03:46,650 --> 00:03:47,710
‫sarà nullo.

86
00:03:47,710 --> 00:03:51,610
‫Ricorda e in JavaScript, null è un valore di errore, quindi

87
00:03:51,610 --> 00:03:54,660
‫un valore che verrà convertito in falso qui

88
00:03:54,660 --> 00:03:56,250
‫in un'istruzione if.

89
00:03:56,250 --> 00:03:58,060
‫Ok, quindi, se non c'è tour,

90
00:03:58,060 --> 00:03:59,450
‫allora tour è

91
00:03:59,450 --> 00:04:01,790
‫falso e non falso è ovviamente vero

92
00:04:01,790 --> 00:04:04,830
‫e quindi è così che inseriamo questo blocco if.

93
00:04:04,830 --> 00:04:07,600
‫Allora, cosa vogliamo fare se non c'è il tour?

94
00:04:07,600 --> 00:04:11,530
‫Bene, vogliamo creare il prossimo con un errore.

95
00:04:11,530 --> 00:04:14,861
‫Quindi, per saltare direttamente all'errore e al

96
00:04:14,861 --> 00:04:15,990
‫middleware collegato.

97
00:04:15,990 --> 00:04:18,870
‫Quindi, facciamo un nuovo AppError che

98
00:04:20,610 --> 00:04:23,350
‫non è ancora disponibile, dobbiamo

99
00:04:23,350 --> 00:04:26,120
‫ancora importarlo ma usiamolo qui subito.

100
00:04:26,120 --> 00:04:27,950
‫Ok, quindi diciamo

101
00:04:30,500 --> 00:04:34,673
‫solo che nessun tour è stato trovato con quell'ID.

102
00:04:35,580 --> 00:04:37,070
‫E poi un codice

103
00:04:37,070 --> 00:04:40,940
‫di stato ricorda che il secondo argomento è 404, va bene?

104
00:04:40,940 --> 00:04:43,460
‫Ora un'ultima cosa che dobbiamo fare

105
00:04:43,460 --> 00:04:46,470
‫qui, vale a dire restituire, ok perché vogliamo

106
00:04:46,470 --> 00:04:49,410
‫restituire questa funzione immediatamente e non passare

107
00:04:49,410 --> 00:04:52,250
‫alla riga successiva che sarebbe questa e

108
00:04:52,250 --> 00:04:53,690
‫che fondamentalmente proverebbe

109
00:04:53,690 --> 00:04:57,800
‫a inviare due risposte e noi ha già riscontrato quell'errore prima,

110
00:04:57,800 --> 00:05:00,210
‫quindi spero che te lo ricordi

111
00:05:00,210 --> 00:05:02,020
‫e questo è il

112
00:05:02,020 --> 00:05:05,580
‫motivo per cui abbiamo sempre bisogno di tornare qui.

113
00:05:05,580 --> 00:05:09,610
‫Ok, ora andiamo avanti e importiamo rapidamente l'appError ed

114
00:05:10,870 --> 00:05:13,200
‫è simile a questo qui,

115
00:05:13,200 --> 00:05:14,823
‫quindi duplichiamo.

116
00:05:17,990 --> 00:05:21,203
‫Ok, e qui in realtà è con la A maiuscola.

117
00:05:22,170 --> 00:05:24,210
‫Va bene, salvalo e ora

118
00:05:24,210 --> 00:05:25,850
‫proviamolo di nuovo e

119
00:05:27,160 --> 00:05:31,450
‫ora in effetti non è stato trovato nessun tour con quell'ID 404.

120
00:05:31,450 --> 00:05:34,440
‫Perfetto, quindi esattamente quello che volevamo.

121
00:05:34,440 --> 00:05:37,170
‫Oh e hai anche visto che abbiamo fallito qui.

122
00:05:37,170 --> 00:05:40,980
‫Ok, quindi anche questo viene da o classe.

123
00:05:40,980 --> 00:05:44,270
‫Ottimo, quindi funziona e quindi spero davvero

124
00:05:44,270 --> 00:05:48,060
‫che tu abbia capito esattamente come funziona ora tutta

125
00:05:48,060 --> 00:05:50,370
‫questa gestione degli errori.

126
00:05:50,370 --> 00:05:53,300
‫Ok, quindi creiamo di nuovo un errore e

127
00:05:53,300 --> 00:05:55,450
‫poi passiamo quell'errore a next e

128
00:05:55,450 --> 00:05:57,820
‫non appena next riceve qualcosa, presume che

129
00:05:57,820 --> 00:05:59,880
‫si tratti di un errore

130
00:05:59,880 --> 00:06:00,757
‫e passerà

131
00:06:00,757 --> 00:06:03,630
‫direttamente al middleware di gestione degli errori globale

132
00:06:03,630 --> 00:06:06,683
‫che invierà quindi la risposta per noi , bene?

133
00:06:08,210 --> 00:06:09,850
‫Quindi, copiamo questo

134
00:06:09,850 --> 00:06:12,410
‫e inseriamolo in tutti gli altri

135
00:06:12,410 --> 00:06:15,600
‫gestori che interrogano i documenti in base all'ID.

136
00:06:15,600 --> 00:06:20,470
‫Quindi, non creare un tour ma aggiorna un tour, ok?

137
00:06:20,470 --> 00:06:21,380
‫E così,

138
00:06:21,380 --> 00:06:23,120
‫qui lo stesso, se stiamo cercando

139
00:06:23,120 --> 00:06:24,360
‫di aggiornare il tour

140
00:06:24,360 --> 00:06:26,773
‫che non esiste, ci darà lo stesso identico errore.

141
00:06:29,210 --> 00:06:32,470
‫Infine, ovviamente, lo stesso con l'eliminazione.

142
00:06:32,470 --> 00:06:35,870
‫E ora vedi che ESLint mi ha dato questo errore qui

143
00:06:35,870 --> 00:06:38,710
‫e quindi, questo perché questo tour non è definito

144
00:06:38,710 --> 00:06:41,730
‫e in questo caso, ESLint mi ha davvero salvato qui

145
00:06:41,730 --> 00:06:43,660
‫dalla creazione di questo bug.

146
00:06:43,660 --> 00:06:44,550
‫Destra?

147
00:06:44,550 --> 00:06:46,790
‫Quindi, ancora senza ESLint, probabilmente l'avrei semplicemente

148
00:06:46,790 --> 00:06:48,570
‫incollato qui e l'avrei chiamato

149
00:06:48,570 --> 00:06:49,920
‫un giorno senza

150
00:06:49,920 --> 00:06:53,050
‫nemmeno notare che il tour non è definito da

151
00:06:53,050 --> 00:06:54,600
‫nessuna parte all'interno di

152
00:06:54,600 --> 00:06:57,830
‫questa funzione, ma poiché abbiamo installato questo strumento davvero prezioso,

153
00:06:57,830 --> 00:06:59,970
‫ora posso andare avanti e risolverlo.

154
00:06:59,970 --> 00:07:01,820
‫Va bene, quindi fino

155
00:07:01,820 --> 00:07:06,490
‫a questo punto, abbiamo semplicemente aspettato questa istruzione di eliminazione qui e non

156
00:07:06,490 --> 00:07:08,460
‫ne abbiamo salvato il risultato,

157
00:07:08,460 --> 00:07:10,710
‫semplicemente perché non ne avevamo bisogno.

158
00:07:10,710 --> 00:07:13,200
‫Ok, ma in questo momento ne abbiamo davvero

159
00:07:13,200 --> 00:07:15,140
‫bisogno perché vogliamo questa variabile

160
00:07:15,140 --> 00:07:18,413
‫di tour per verificare se c'è effettivamente un tour o meno.

161
00:07:21,460 --> 00:07:23,760
‫Quindi, molto facile, const tour e poi uguale

162
00:07:23,760 --> 00:07:25,350
‫a quel risultato, dai

163
00:07:25,350 --> 00:07:27,450
‫un salvataggio e poi l'errore è sparito.

164
00:07:28,610 --> 00:07:29,820
‫Quindi, fantastico.

165
00:07:29,820 --> 00:07:32,770
‫ESLint al lavoro, va bene?

166
00:07:32,770 --> 00:07:37,770
‫Ora forse hai notato che non ho aggiunto questo errore 404 qui

167
00:07:37,950 --> 00:07:40,000
‫in questo gestore getAllTour.

168
00:07:40,000 --> 00:07:41,910
‫Allora, perché l'ho fatto?

169
00:07:41,910 --> 00:07:43,620
‫E quindi lascia che ti spieghi perché.

170
00:07:43,620 --> 00:07:46,330
‫Quindi, quando non vengono trovati risultati, ad

171
00:07:46,330 --> 00:07:50,530
‫esempio, non ci sono risultati corrispondenti a un filtro, o perché

172
00:07:50,530 --> 00:07:52,520
‫la pagina è stata

173
00:07:52,520 --> 00:07:55,970
‫richiesta che non esiste, allora ovviamente potremmo considerare di inviare

174
00:07:55,970 --> 00:07:58,550
‫un errore 404 e dire che i

175
00:07:58,550 --> 00:08:01,220
‫dati non erano trovato ma secondo me

176
00:08:01,220 --> 00:08:03,760
‫e anche l'opinione di altri sviluppatori, ciò

177
00:08:03,760 --> 00:08:07,170
‫non è del tutto corretto in questa richiesta perché

178
00:08:07,170 --> 00:08:09,240
‫non c'era davvero un errore.

179
00:08:09,240 --> 00:08:11,950
‫Voglio dire, la richiesta è stata ricevuta correttamente.

180
00:08:11,950 --> 00:08:14,550
‫Il database ha cercato correttamente i tour

181
00:08:14,550 --> 00:08:16,950
‫e ha trovato esattamente zero record,

182
00:08:16,950 --> 00:08:19,150
‫quindi questi zero record

183
00:08:19,150 --> 00:08:23,250
‫sono esattamente ciò che invieremo indietro insieme al codice HTTP 200.

184
00:08:23,250 --> 00:08:25,120
‫Va bene, quindi ancora una volta

185
00:08:25,120 --> 00:08:27,300
‫ritengo che non possa esserci davvero un errore

186
00:08:27,300 --> 00:08:29,610
‫quando un utente richiede tutti i tour a

187
00:08:29,610 --> 00:08:32,680
‫meno che, ovviamente, non ci sia qualche errore nel database o

188
00:08:32,680 --> 00:08:33,850
‫qualcosa del genere.

189
00:08:33,850 --> 00:08:35,210
‫Ma in tal

190
00:08:35,210 --> 00:08:37,600
‫caso, Mongoose genererà automaticamente un errore.

191
00:08:37,600 --> 00:08:40,950
‫Giusto, che a sua volta verrà catturato dalla nostra

192
00:08:40,950 --> 00:08:42,920
‫funzione o catchAsync e, come

193
00:08:42,920 --> 00:08:44,330
‫già sapete, gestito nel

194
00:08:44,330 --> 00:08:47,510
‫nostro gestore di errori globale e, come già

195
00:08:47,510 --> 00:08:48,800
‫sapete, gestito

196
00:08:48,800 --> 00:08:52,000
‫nel nostro middleware di gestione degli errori globale.

197
00:08:52,000 --> 00:08:55,640
‫Va bene, ho detto queste parole così tante volte ormai.

198
00:08:55,640 --> 00:08:57,717
‫Comunque, spero che abbia

199
00:08:57,717 --> 00:09:01,113
‫avuto senso e quindi, sì, ora andiamo avanti.

