﻿1
00:00:01,100 --> 00:00:02,750
‫Insegnante: In questo video, creiamo

2
00:00:02,750 --> 00:00:05,470
‫ora una classe di errore migliore e più utile e

3
00:00:05,470 --> 00:00:07,373
‫facciamo anche un po' di refactoring.

4
00:00:09,210 --> 00:00:11,870
‫E partendo da quella classe di

5
00:00:11,870 --> 00:00:15,053
‫errore, creiamo un nuovo file nella nostra cartella Utilità.

6
00:00:15,950 --> 00:00:18,990
‫Quindi, nuovo file, e lo chiamerò

7
00:00:20,980 --> 00:00:25,820
‫AppError perché quello sarà il nome della classe, va bene?

8
00:00:25,820 --> 00:00:30,820
‫Quindi, class AppError, e in realtà vogliamo che tutti

9
00:00:30,867 --> 00:00:34,780
‫i nostri oggetti AppError ereditino dall'errore

10
00:00:34,780 --> 00:00:39,260
‫incorporato, quindi estendiamo effettivamente la classe di errore incorporata.

11
00:00:39,260 --> 00:00:43,720
‫Quindi, abbiamo usato l'estensione Error, ok?

12
00:00:43,720 --> 00:00:46,870
‫Quindi, l'abbiamo fatto prima da qualche parte in

13
00:00:46,870 --> 00:00:50,950
‫questo corso, e di nuovo si tratta solo di lezioni ES6, ok?

14
00:00:50,950 --> 00:00:52,920
‫In questo caso, l'ereditarietà

15
00:00:52,920 --> 00:00:56,790
‫della classe, dove una classe eredita dall'altra, ok?

16
00:00:56,790 --> 00:00:59,300
‫Quindi, come sempre, il nostro costruttore

17
00:00:59,300 --> 00:01:01,800
‫e quello che passeremo in

18
00:01:01,800 --> 00:01:04,490
‫un nuovo oggetto creato dalla classe

19
00:01:04,490 --> 00:01:08,660
‫AppError saranno il messaggio e lo statusCode, quindi solo

20
00:01:08,660 --> 00:01:09,853
‫questi due.

21
00:01:11,330 --> 00:01:15,130
‫Ok, allora ricorda che il metodo del costruttore viene

22
00:01:15,130 --> 00:01:19,210
‫chiamato ogni volta che creiamo un nuovo oggetto da questa classe.

23
00:01:19,210 --> 00:01:22,116
‫Ora, come al solito, quando estendiamo

24
00:01:22,116 --> 00:01:25,760
‫una classe genitore, chiamiamo super per chiamare il

25
00:01:25,760 --> 00:01:28,203
‫costruttore genitore, va bene, e

26
00:01:30,100 --> 00:01:33,580
‫lo facciamo con message perché il messaggio è

27
00:01:33,580 --> 00:01:37,160
‫in realtà l'unico parametro che l'errore integrato accetta.

28
00:01:37,160 --> 00:01:40,990
‫Ok, quindi questo è fondamentalmente che stai chiamando

29
00:01:40,990 --> 00:01:44,305
‫errore, va bene, e poi questa

30
00:01:44,305 --> 00:01:46,160
‫è la solita

31
00:01:48,300 --> 00:01:53,030
‫roba, impostiamo statusCode su statusCode, va bene, e ora

32
00:01:53,030 --> 00:01:56,463
‫vogliamo anche impostare lo stato stesso.

33
00:01:58,200 --> 00:02:01,670
‫Quindi, ricorda che lo stato può essere fail o

34
00:02:01,670 --> 00:02:03,920
‫error, e potremmo passarlo all'oggetto, ma

35
00:02:03,920 --> 00:02:05,700
‫non è nemmeno

36
00:02:05,700 --> 00:02:08,530
‫realmente necessario, perché lo stato dipende dallo statusCode.

37
00:02:08,530 --> 00:02:10,880
‫Quindi, quando statusCode è un 400,

38
00:02:10,880 --> 00:02:12,630
‫lo stato sarà fail,

39
00:02:12,630 --> 00:02:16,230
‫e se è un 500, allora sarà un errore, giusto,

40
00:02:16,230 --> 00:02:18,336
‫e quindi verifica semplicemente se

41
00:02:18,336 --> 00:02:20,420
‫statusCode inizia con un quattro.

42
00:02:20,420 --> 00:02:23,800
‫Quindi, in JavaScript, c'è un metodo startWith che possiamo chiamare sulle

43
00:02:23,800 --> 00:02:25,540
‫stringhe, e quindi penso che

44
00:02:25,540 --> 00:02:28,100
‫sia il modo più semplice per fare questo

45
00:02:28,100 --> 00:02:31,363
‫test, quindi questo è fondamentalmente convertire lo statusCode in una stringa,

46
00:02:32,780 --> 00:02:35,610
‫e per questo sto semplicemente usando un stringa del

47
00:02:35,610 --> 00:02:38,030
‫modello con il codice lì dentro, quindi questo,

48
00:02:38,030 --> 00:02:40,380
‫o in realtà possiamo semplicemente usare statusCode.

49
00:02:41,781 --> 00:02:42,614
‫Quindi, statusCode,

50
00:02:47,001 --> 00:02:48,750
‫e poi inizia con, allora anche

51
00:02:48,750 --> 00:02:51,120
‫qui abbiamo bisogno di una stringa, e quindi se

52
00:02:51,120 --> 00:02:54,330
‫statusCode come stringa inizia con un quattro, beh, allora abbiamo un errore.

53
00:02:54,330 --> 00:02:58,360
‫E quindi qui, usiamo il ternario,

54
00:02:58,360 --> 00:03:02,120
‫ok, quindi fallisce quando inizia

55
00:03:02,120 --> 00:03:06,890
‫con un quattro, altrimenti è un errore, ok?

56
00:03:06,890 --> 00:03:09,550
‫Quindi, molto semplice, e questo ci salva

57
00:03:09,550 --> 00:03:13,250
‫già dal dover passare manualmente in caso di errore o errore.

58
00:03:13,250 --> 00:03:15,240
‫Bene, ora il prossimo passo,

59
00:03:15,240 --> 00:03:17,120
‫tutti gli errori che

60
00:03:17,120 --> 00:03:20,300
‫creeremo usando questa classe saranno tutti errori operativi.

61
00:03:20,300 --> 00:03:22,070
‫Quindi, gli errori

62
00:03:22,070 --> 00:03:24,130
‫che possiamo prevedere si verificheranno in

63
00:03:24,130 --> 00:03:26,010
‫futuro, come ad esempio un

64
00:03:26,010 --> 00:03:29,560
‫utente che crea un tour senza i campi richiesti, giusto?

65
00:03:29,560 --> 00:03:32,380
‫Quindi questo è un errore operativo, okay, e

66
00:03:32,380 --> 00:03:34,660
‫quindi di nuovo, d'ora in poi,

67
00:03:34,660 --> 00:03:37,125
‫useremo sempre questa classe AppError che

68
00:03:37,125 --> 00:03:39,070
‫stiamo creando proprio ora

69
00:03:39,070 --> 00:03:42,230
‫per creare tutti gli errori nella nostra applicazione.

70
00:03:42,230 --> 00:03:44,730
‫E quindi questi errori saranno errori operativi, quindi quello

71
00:03:44,730 --> 00:03:46,250
‫che farò ora è

72
00:03:46,250 --> 00:03:49,663
‫creare effettivamente anche un file . è proprietà operativa qui.

73
00:03:50,980 --> 00:03:53,133
‫Così questo. è operativo

74
00:03:56,100 --> 00:03:57,380
‫e impostarlo su true.

75
00:03:57,380 --> 00:03:59,240
‫Quindi tutti i nostri errori

76
00:03:59,240 --> 00:04:01,680
‫otterranno questa proprietà impostata su true, e

77
00:04:01,680 --> 00:04:03,420
‫lo sto facendo in

78
00:04:03,420 --> 00:04:05,890
‫modo che in seguito possiamo testare questa

79
00:04:05,890 --> 00:04:07,910
‫proprietà e inviare solo messaggi di

80
00:04:07,910 --> 00:04:10,360
‫errore al client per questi errori operativi

81
00:04:10,360 --> 00:04:12,510
‫che abbiamo creato utilizzando questa classe.

82
00:04:12,510 --> 00:04:14,550
‫E questo è utile perché

83
00:04:14,550 --> 00:04:17,210
‫alcuni altri errori imprevisti folli che potrebbero

84
00:04:17,210 --> 00:04:19,964
‫verificarsi nella nostra applicazione, ad esempio un errore

85
00:04:19,964 --> 00:04:22,360
‫di programmazione o qualche bug in uno

86
00:04:22,360 --> 00:04:24,550
‫dei pacchetti che richiediamo nella nostra

87
00:04:24,550 --> 00:04:26,100
‫app, e questi

88
00:04:26,100 --> 00:04:29,610
‫errori ovviamente non avranno questo. è una proprietà

89
00:04:29,610 --> 00:04:31,610
‫operativa su di loro, va bene,

90
00:04:31,610 --> 00:04:33,370
‫e potrebbe sembrare un po'

91
00:04:33,370 --> 00:04:35,220
‫confuso a questo punto, ma

92
00:04:35,220 --> 00:04:37,040
‫non preoccuparti, avrà molto senso

93
00:04:37,040 --> 00:04:39,860
‫quando implementeremo quella parte che ho appena menzionato.

94
00:04:39,860 --> 00:04:43,740
‫Quindi, test per questo. è proprietà operativa qui.

95
00:04:43,740 --> 00:04:46,190
‫Bene, e ora solo un ultimo passaggio

96
00:04:46,190 --> 00:04:50,270
‫è che in realtà abbiamo anche bisogno di acquisire la traccia dello stack.

97
00:04:50,270 --> 00:04:53,090
‫Ora, cosa intendo per traccia dello stack?

98
00:04:53,090 --> 00:04:55,430
‫E quindi, lascia che te lo

99
00:04:55,430 --> 00:04:58,380
‫mostri effettivamente, quindi, ti mostro cos'è la traccia dello

100
00:04:58,380 --> 00:05:01,093
‫stack, e quindi lo registrerò qui nella console.

101
00:05:02,180 --> 00:05:05,053
‫Consolle. registro ed errore. stackTrace,

102
00:05:06,390 --> 00:05:10,350
‫quindi ogni errore ottiene questa traccia dello stack, e

103
00:05:10,350 --> 00:05:13,370
‫in realtà è solo uno stack, ok.

104
00:05:13,370 --> 00:05:15,820
‫Quindi sbaglia. stack ci mostrerà

105
00:05:15,820 --> 00:05:17,743
‫fondamentalmente dove si è verificato l'errore.

106
00:05:19,320 --> 00:05:20,743
‫Quindi fammi eseguire

107
00:05:22,450 --> 00:05:24,303
‫questo qui ora, quindi diamo un'occhiata

108
00:05:26,420 --> 00:05:28,000
‫a questo, e quindi ci

109
00:05:28,000 --> 00:05:31,290
‫dà qui l'errore e poi anche dove è successo, ok?

110
00:05:31,290 --> 00:05:33,040
‫Quindi, in questo caso qui,

111
00:05:33,040 --> 00:05:36,390
‫ovviamente, aggiungi app. js alla riga 32.

112
00:05:36,390 --> 00:05:38,810
‫Quindi, proprio qui.

113
00:05:38,810 --> 00:05:40,470
‫Quindi, è lì che

114
00:05:40,470 --> 00:05:42,200
‫abbiamo creato questo errore, e quindi

115
00:05:42,200 --> 00:05:44,972
‫ora è nella nostra traccia dello stack, e ci

116
00:05:44,972 --> 00:05:49,972
‫mostra anche l'intero stack di chiamate qui, che alla fine ha avuto origine in questo errore, ok?

117
00:05:50,400 --> 00:05:52,440
‫Quindi in un certo

118
00:05:52,440 --> 00:05:56,500
‫senso vogliamo preservarlo e allo stesso tempo non aggiungere questo metodo

119
00:05:56,500 --> 00:06:00,390
‫qui, o questa classe, a quella traccia dello stack, ok?

120
00:06:00,390 --> 00:06:02,350
‫E ancora, suona un po' confuso,

121
00:06:02,350 --> 00:06:03,980
‫lo so, ma in questo

122
00:06:03,980 --> 00:06:06,359
‫caso non è molto importante, tutto ciò che

123
00:06:06,359 --> 00:06:09,100
‫conta è che aggiungiamo solo questa riga di codice

124
00:06:09,100 --> 00:06:11,873
‫qui, che è Error. CapturestackTrace, quindi esattamente

125
00:06:13,670 --> 00:06:16,160
‫quello che ottieni qui, e

126
00:06:16,160 --> 00:06:19,490
‫all'inizio dobbiamo specificare l'oggetto corrente, che è

127
00:06:19,490 --> 00:06:23,530
‫questo, e poi la stessa classe AppError, che sarà

128
00:06:23,530 --> 00:06:26,113
‫questa. costruttore.

129
00:06:28,340 --> 00:06:31,220
‫Ok, in questo modo quando viene creato un nuovo

130
00:06:31,220 --> 00:06:34,361
‫oggetto e viene chiamata una funzione di costruzione, quella chiamata

131
00:06:34,361 --> 00:06:36,388
‫alla funzione non apparirà nella

132
00:06:36,388 --> 00:06:38,863
‫traccia dello stack e non la inquinerà.

133
00:06:40,240 --> 00:06:41,073
‫Va

134
00:06:42,250 --> 00:06:44,920
‫bene, quindi mettiamolo qui, e

135
00:06:44,920 --> 00:06:48,280
‫sì, quindi questa è la nostra classe

136
00:06:48,280 --> 00:06:51,363
‫AppError, quindi ora esportiamola da qui.

137
00:06:52,450 --> 00:06:56,443
‫Quindi, modulo. exports è ovviamente AppError.

138
00:06:57,340 --> 00:07:00,367
‫Fantastico, solo una domanda che potresti avere è "Perché

139
00:07:00,367 --> 00:07:04,720
‫non l'ho impostato. messaggio uguale a messaggio? ' Bene,

140
00:07:04,720 --> 00:07:07,600
‫è solo perché proprio qui ho chiamato la

141
00:07:07,600 --> 00:07:10,253
‫classe genitore, giusto, e la classe genitore

142
00:07:10,253 --> 00:07:13,380
‫è errore, e qualunque cosa passiamo in essa

143
00:07:13,380 --> 00:07:15,350
‫sarà la proprietà del messaggio.

144
00:07:15,350 --> 00:07:16,860
‫Quindi, proprio come ti ho detto prima.

145
00:07:16,860 --> 00:07:20,880
‫E quindi, fondamentalmente, qui facendo questa chiamata genitore abbiamo già impostato

146
00:07:20,880 --> 00:07:22,890
‫la proprietà del messaggio sul nostro

147
00:07:22,890 --> 00:07:24,463
‫messaggio in arrivo.

148
00:07:25,970 --> 00:07:28,500
‫Va bene, salvalo e ora possiamo chiuderlo, non

149
00:07:28,500 --> 00:07:29,653
‫ne abbiamo più

150
00:07:30,770 --> 00:07:32,933
‫bisogno, e qui lo importeremo qui.

151
00:07:34,621 --> 00:07:35,871
‫Const AppError,

152
00:07:38,980 --> 00:07:39,883
‫require,

153
00:07:41,560 --> 00:07:43,600
‫e poi è

154
00:07:43,600 --> 00:07:48,320
‫in utils, quindi Utilities e appError, okay, e

155
00:07:48,320 --> 00:07:51,423
‫quindi ora andiamo avanti e usiamolo.

156
00:07:53,280 --> 00:07:55,070
‫Commenta questo pezzo di codice

157
00:07:55,070 --> 00:07:57,420
‫ed effettivamente elimina quello che avevamo prima,

158
00:07:58,860 --> 00:08:00,210
‫e questo ora

159
00:08:00,210 --> 00:08:02,650
‫creerà l'errore proprio qui all'interno del prossimo.

160
00:08:02,650 --> 00:08:04,433
‫Quindi, nuovo AppError, e poi

161
00:08:06,600 --> 00:08:07,783
‫il messaggio, che è

162
00:08:09,430 --> 00:08:10,793
‫questo, e il codice

163
00:08:12,910 --> 00:08:14,023
‫di stato.

164
00:08:15,620 --> 00:08:18,410
‫Giusto, e il fallimento, ricorda,

165
00:08:18,410 --> 00:08:22,480
‫verrà automaticamente risolto, quindi cancelliamo tutto questo, salviamolo

166
00:08:22,480 --> 00:08:23,723
‫qui e

167
00:08:25,320 --> 00:08:29,630
‫ancora una volta, proviamo questo percorso sbagliato, e in

168
00:08:29,630 --> 00:08:32,940
‫effetti otteniamo ancora il nostro stesso

169
00:08:32,940 --> 00:08:37,530
‫errore, e otteniamo anche lo stesso identico stack trace.

170
00:08:37,530 --> 00:08:40,280
‫Ok, e finalmente voglio

171
00:08:40,280 --> 00:08:43,550
‫anche esportare questo middleware qui, ok?

172
00:08:43,550 --> 00:08:45,260
‫Quindi, in pratica, questo gestore

173
00:08:45,260 --> 00:08:47,150
‫perché nel resto della sezione creeremo

174
00:08:47,150 --> 00:08:48,760
‫un paio di funzioni

175
00:08:48,760 --> 00:08:51,700
‫diverse per gestire diversi tipi di errori, quindi voglio

176
00:08:51,700 --> 00:08:53,280
‫che tutte queste

177
00:08:53,280 --> 00:08:55,912
‫funzioni siano tutte nello stesso file, ok?

178
00:08:55,912 --> 00:08:58,920
‫E possiamo dire che tutte queste

179
00:08:58,920 --> 00:09:02,310
‫funzioni che ho appena menzionato sono gestori, ok,

180
00:09:02,310 --> 00:09:05,320
‫quindi gestori, li chiamiamo anche controller nel

181
00:09:05,320 --> 00:09:08,240
‫contesto dell'architettura MVC, quindi ora creiamo

182
00:09:08,240 --> 00:09:10,130
‫effettivamente un file

183
00:09:10,130 --> 00:09:13,253
‫controller di errore nella nostra cartella controller.

184
00:09:14,190 --> 00:09:18,280
‫Ok, e questo potrebbe sembrare o sembrare un po' strano perché in

185
00:09:18,280 --> 00:09:21,330
‫realtà non abbiamo una risorsa di errore ok, quindi

186
00:09:22,200 --> 00:09:24,940
‫probabilmente alcune persone non saranno d'accordo con me

187
00:09:24,940 --> 00:09:26,923
‫sul fatto che questo sia il

188
00:09:28,540 --> 00:09:31,100
‫posto corretto, ma personalmente mi piace farlo in

189
00:09:31,100 --> 00:09:32,520
‫questo modo perché

190
00:09:32,520 --> 00:09:34,910
‫a alla fine della giornata, queste funzioni,

191
00:09:34,910 --> 00:09:37,370
‫sono un po' per controllare i nostri

192
00:09:37,370 --> 00:09:39,570
‫errori, va bene, e quindi almeno

193
00:09:39,570 --> 00:09:43,140
‫per me ha senso chiamare semplicemente questa funzione qui il controller

194
00:09:43,140 --> 00:09:46,500
‫degli errori, e qui volevo incollare quella funzione middleware ,

195
00:09:46,500 --> 00:09:49,173
‫ma immagino di non averlo copiato, quindi ripetiamolo.

196
00:09:51,010 --> 00:09:53,540
‫Va bene, quindi in realtà esporterò questo

197
00:09:53,540 --> 00:09:56,240
‫qui come modulo. exports perché

198
00:09:56,240 --> 00:09:57,676
‫le altre funzioni

199
00:09:57,676 --> 00:09:59,606
‫handle che creeremo in

200
00:09:59,606 --> 00:10:02,440
‫seguito, non le esporterò da qui.

201
00:10:02,440 --> 00:10:05,453
‫Quindi saranno solo un po' di aiuto.

202
00:10:06,320 --> 00:10:11,320
‫Quindi, modulo. exports è uguale a questa funzione, ok?

203
00:10:12,210 --> 00:10:15,420
‫In realtà, liberiamoci di questa console. accedi qui,

204
00:10:15,420 --> 00:10:18,510
‫salvalo e ora di nuovo nella nostra

205
00:10:18,510 --> 00:10:21,080
‫app, ovviamente ora dobbiamo collegare

206
00:10:21,080 --> 00:10:23,040
‫quella funzione middleware qui.

207
00:10:23,040 --> 00:10:25,660
‫Quindi, andiamo di nuovo avanti e

208
00:10:26,700 --> 00:10:28,710
‫importiamolo e posso chiamarlo

209
00:10:28,710 --> 00:10:29,760
‫come

210
00:10:30,802 --> 00:10:32,635
‫voglio, quindi lascia che

211
00:10:34,679 --> 00:10:36,853
‫lo chiami globalErrorHandler con

212
00:10:38,650 --> 00:10:39,840
‫la H

213
00:10:42,300 --> 00:10:45,033
‫maiuscola, e richiederò controller ed errorController.

214
00:10:49,700 --> 00:10:52,660
‫Rimettilo qui, e ora per il test finale

215
00:10:52,660 --> 00:10:54,343
‫dopo questo refactoring.

216
00:10:55,810 --> 00:10:58,970
‫Vediamo, e in effetti

217
00:10:58,970 --> 00:11:03,040
‫ancora una volta, tutto funziona bene, ok?

218
00:11:03,040 --> 00:11:06,490
‫Quindi, perfetto, questo era l'obiettivo di questo video, ci

219
00:11:06,490 --> 00:11:07,690
‫vediamo nel prossimo.

