﻿1
00:00:01,070 --> 00:00:01,950
‫Istruttore: Va bene!

2
00:00:01,950 --> 00:00:04,040
‫E ora, per finire questa

3
00:00:04,040 --> 00:00:07,043
‫sezione, impariamo come catturare le eccezioni non rilevate.

4
00:00:08,660 --> 00:00:11,930
‫Ma cosa sono esattamente le eccezioni non rilevate?

5
00:00:11,930 --> 00:00:15,290
‫Bene, tutti gli errori, o chiamiamoli anche bug, che si

6
00:00:15,290 --> 00:00:17,280
‫verificano nel nostro codice sincrono

7
00:00:17,280 --> 00:00:21,230
‫ma non vengono gestiti da nessuna parte sono chiamati eccezioni non rilevate.

8
00:00:21,230 --> 00:00:25,340
‫E come prima, proprio come con i rifiuti non gestiti, abbiamo

9
00:00:25,340 --> 00:00:28,730
‫anche un modo per gestire le eccezioni non rilevate.

10
00:00:28,730 --> 00:00:30,720
‫Quindi lascia che ti mostri

11
00:00:30,720 --> 00:00:32,823
‫rapidamente un esempio di un'eccezione non rilevata.

12
00:00:34,370 --> 00:00:37,400
‫Quindi facciamo semplicemente finta che stiamo cercando

13
00:00:37,400 --> 00:00:40,423
‫di consolare. registra qualcosa che non esiste.

14
00:00:42,110 --> 00:00:46,600
‫E così subito, otteniamo questo errore qui, x non è definito, e

15
00:00:46,600 --> 00:00:50,080
‫quindi per impostazione predefinita, otteniamo l'intera traccia dello stack

16
00:00:50,080 --> 00:00:51,960
‫qui stampata sulla console.

17
00:00:51,960 --> 00:00:52,793
‫Tutto bene.

18
00:00:52,793 --> 00:00:57,660
‫E ora, per risolvere questo problema, è molto simile a fare i

19
00:00:57,660 --> 00:00:59,380
‫rifiuti non gestiti.

20
00:00:59,380 --> 00:01:02,040
‫Quindi, di nuovo, stiamo ascoltando un evento,

21
00:01:02,040 --> 00:01:04,040
‫questa volta si chiama uncaughtException.

22
00:01:08,662 --> 00:01:11,912
‫E ovviamente deve essere tra virgolette.

23
00:01:12,840 --> 00:01:17,390
‫E poi, proprio come prima, passiamo alla nostra funzione di callback.

24
00:01:17,390 --> 00:01:18,223
‫Bene.

25
00:01:18,223 --> 00:01:20,960
‫E ora in realtà quello che stiamo facendo qui è molto simile

26
00:01:20,960 --> 00:01:22,350
‫a quello che abbiamo fatto qui.

27
00:01:22,350 --> 00:01:24,970
‫Quindi vogliamo bloccare l'errore sulla console

28
00:01:24,970 --> 00:01:29,690
‫in modo che venga visualizzato nei log del nostro server, ok?

29
00:01:29,690 --> 00:01:32,430
‫Quindi, dandoci un modo per risolvere il problema.

30
00:01:32,430 --> 00:01:35,223
‫E poi vogliamo chiudere con garbo il server.

31
00:01:36,750 --> 00:01:39,010
‫Quindi, in realtà qui

32
00:01:39,010 --> 00:01:41,590
‫voglio stampare l'intero errore sulla console

33
00:01:41,590 --> 00:01:43,940
‫e non solo il messaggio, ok?

34
00:01:43,940 --> 00:01:45,993
‫E cambiamo anche l'ordine qui, ma

35
00:01:47,300 --> 00:01:48,660
‫questo è tutto.

36
00:01:48,660 --> 00:01:50,140
‫Quindi il resto è lo stesso.

37
00:01:50,140 --> 00:01:51,290
‫Ed

38
00:01:53,310 --> 00:01:58,310
‫ecco ovviamente un'ECCEZIONE NON CATTURATA!

39
00:01:58,320 --> 00:02:01,810
‫Ora potrei rifattorizzare questo qui in una bella

40
00:02:01,810 --> 00:02:05,020
‫funzione, ma manteniamolo così, va bene?

41
00:02:05,020 --> 00:02:07,123
‫Ok, ora ripetiamo questo.

42
00:02:08,330 --> 00:02:11,090
‫E quindi diamo un'occhiata a ciò che abbiamo qui.

43
00:02:11,090 --> 00:02:13,700
‫E infatti, ora vediamo ECCEZIONE NON CATTURATA!

44
00:02:13,700 --> 00:02:14,780
‫Chiudere.

45
00:02:14,780 --> 00:02:15,750
‫Tutto ok?

46
00:02:15,750 --> 00:02:18,770
‫E in realtà questo stampa di nuovo l'intero stack

47
00:02:18,770 --> 00:02:21,400
‫sulla console, ma non lo voglio davvero.

48
00:02:21,400 --> 00:02:22,660
‫Non mi piace.

49
00:02:22,660 --> 00:02:25,860
‫Quindi torniamo a quello che abbiamo avuto qui.

50
00:02:25,860 --> 00:02:28,683
‫Quindi sbaglia. nome e poi sbagliare. Messaggio.

51
00:02:30,890 --> 00:02:32,610
‫Ok, quindi ora

52
00:02:32,610 --> 00:02:36,290
‫abbiamo il ReferenceError che x non è definito, ok?

53
00:02:36,290 --> 00:02:38,520
‫E mettiamo lo stesso qui.

54
00:02:38,520 --> 00:02:39,983
‫Quindi, proprio come prima.

55
00:02:40,950 --> 00:02:41,783
‫Tutto bene.

56
00:02:41,783 --> 00:02:43,070
‫E questo è tutto

57
00:02:43,070 --> 00:02:45,370
‫ciò che serve per catturare eccezioni non rilevate.

58
00:02:45,370 --> 00:02:48,180
‫Ora, mentre qui nel rifiuto non gestito, l'arresto

59
00:02:48,180 --> 00:02:51,230
‫anomalo dell'applicazione come abbiamo fatto qui è facoltativo, quando

60
00:02:51,230 --> 00:02:53,630
‫c'è un'eccezione non rilevata, abbiamo davvero,

61
00:02:53,630 --> 00:02:57,150
‫davvero bisogno di arrestare l'applicazione perché dopo che si è

62
00:02:57,150 --> 00:02:59,970
‫verificata un'eccezione non rilevata, l'intero processo del nodo

63
00:02:59,970 --> 00:03:01,610
‫è in un

64
00:03:01,610 --> 00:03:04,370
‫modo così -chiamato stato immondo, va bene?

65
00:03:04,370 --> 00:03:07,770
‫E quindi per risolvere il problema, il processo deve terminare

66
00:03:07,770 --> 00:03:09,940
‫e poi essere riavviato, ok?

67
00:03:09,940 --> 00:03:11,330
‫E ancora,

68
00:03:11,330 --> 00:03:13,460
‫in produzione, dovremmo avere uno

69
00:03:13,460 --> 00:03:16,640
‫strumento che riavvierà l'applicazione dopo l'arresto anomalo.

70
00:03:16,640 --> 00:03:19,270
‫E molti servizi di hosting lo fanno già fuori

71
00:03:19,270 --> 00:03:20,860
‫dagli schemi, va bene?

72
00:03:20,860 --> 00:03:23,170
‫Quindi, in modo completamente automatico senza che

73
00:03:23,170 --> 00:03:24,980
‫noi dobbiamo fare nulla.

74
00:03:24,980 --> 00:03:27,820
‫Ora, nel nodo. js, non è

75
00:03:27,820 --> 00:03:31,580
‫proprio una buona pratica affidarsi ciecamente a questi due gestori di

76
00:03:31,580 --> 00:03:34,170
‫errori che abbiamo appena implementato qui, ok?

77
00:03:34,170 --> 00:03:36,470
‫Quindi idealmente gli errori dovrebbero essere gestiti

78
00:03:36,470 --> 00:03:38,120
‫proprio dove si verificano.

79
00:03:38,120 --> 00:03:42,150
‫Quindi, per esempio, nel problema di connessione al database, dovremmo ovviamente

80
00:03:42,150 --> 00:03:44,660
‫aggiungere un gestore di cattura lì e

81
00:03:44,660 --> 00:03:46,480
‫non semplicemente fare affidamento

82
00:03:46,480 --> 00:03:50,160
‫sul callback di rifiuto non gestito che abbiamo qui, ok?

83
00:03:50,160 --> 00:03:53,600
‫E alcune persone dicono anche che non dovremmo usarli affatto, ma non

84
00:03:53,600 --> 00:03:54,770
‫sono d'accordo con questo.

85
00:03:54,770 --> 00:03:58,090
‫Penso che come rete di sicurezza, diciamo,

86
00:03:58,090 --> 00:04:02,470
‫possano essere molto utili e avere un ruolo nella nostra applicazione.

87
00:04:02,470 --> 00:04:04,020
‫Ora in realtà questo

88
00:04:04,020 --> 00:04:07,300
‫gestore dovrebbe essere in cima al nostro codice, ok?

89
00:04:07,300 --> 00:04:11,280
‫O almeno prima che qualsiasi altro codice venga realmente eseguito.

90
00:04:11,280 --> 00:04:14,980
‫Perché guarda cosa succede se sposto questa riga di codice qui

91
00:04:14,980 --> 00:04:16,513
‫prima di questo gestore.

92
00:04:17,350 --> 00:04:19,593
‫Quindi se lo metto qui, ad esempio,

93
00:04:21,140 --> 00:04:23,070
‫e poi gli do un

94
00:04:23,070 --> 00:04:24,680
‫salvataggio, allora in realtà

95
00:04:24,680 --> 00:04:29,410
‫vedi che il nostro gestore non rileva questa eccezione, quindi questo errore qui, giusto?

96
00:04:29,410 --> 00:04:31,830
‫E questo perché solo qui alla

97
00:04:31,830 --> 00:04:35,010
‫fine iniziamo effettivamente ad ascoltare un'eccezione non rilevata.

98
00:04:35,010 --> 00:04:37,580
‫Ma in questo caso, l'eccezione non

99
00:04:37,580 --> 00:04:40,380
‫rilevata si verifica prima ancora che ascoltiamo quell'evento.

100
00:04:40,380 --> 00:04:44,630
‫E quindi, non abbiamo modo di prenderlo, giusto?

101
00:04:44,630 --> 00:04:48,920
‫E quindi dovremmo idealmente metterlo qui, proprio in alto, di nuovo prima che

102
00:04:48,920 --> 00:04:51,030
‫venga eseguito qualsiasi altro codice.

103
00:04:51,030 --> 00:04:53,423
‫Soprattutto quello nella nostra applicazione.

104
00:04:54,580 --> 00:04:57,760
‫Quindi mettiamolo in realtà proprio qui.

105
00:04:57,760 --> 00:04:59,550
‫Ora il problema qui

106
00:04:59,550 --> 00:05:02,820
‫sarà che il server non è definito a questo punto.

107
00:05:02,820 --> 00:05:04,160
‫Ma questo non è

108
00:05:04,160 --> 00:05:06,180
‫un problema, perché in realtà non abbiamo

109
00:05:06,180 --> 00:05:08,060
‫affatto bisogno del server qui, va bene?

110
00:05:08,060 --> 00:05:09,480
‫E questo perché

111
00:05:09,480 --> 00:05:11,270
‫questi errori, quindi queste eccezioni non

112
00:05:11,270 --> 00:05:13,670
‫rilevate, non si verificheranno in modo asincrono.

113
00:05:13,670 --> 00:05:15,630
‫Quindi in realtà non avranno

114
00:05:15,630 --> 00:05:17,660
‫nulla a che fare con il server.

115
00:05:17,660 --> 00:05:19,360
‫Quindi non abbiamo affatto bisogno di questo qui.

116
00:05:20,470 --> 00:05:22,250
‫Possiamo semplicemente salvarlo qui,

117
00:05:22,250 --> 00:05:25,480
‫quindi ora lo abbiamo prima di richiedere effettivamente la

118
00:05:25,480 --> 00:05:26,890
‫nostra applicazione principale.

119
00:05:26,890 --> 00:05:28,663
‫E quindi se ora abbiamo

120
00:05:29,940 --> 00:05:31,850
‫un errore, proviamolo prima qui, così

121
00:05:31,850 --> 00:05:33,500
‫vedrai che ora

122
00:05:33,500 --> 00:05:36,710
‫siamo tornati a catturarlo effettivamente nel nostro gestore di errori.

123
00:05:36,710 --> 00:05:41,333
‫Ma se ora avessimo questo codice, ad esempio all'interno di app. js, diciamo, non ha molta

124
00:05:42,350 --> 00:05:45,810
‫importanza, diciamo solo che è qui, e se

125
00:05:45,810 --> 00:05:47,410
‫ora eseguiamo

126
00:05:47,410 --> 00:05:50,260
‫questo, beh, allora vedi che stiamo

127
00:05:50,260 --> 00:05:52,530
‫ancora catturando quell'eccezione nel nostro

128
00:05:52,530 --> 00:05:56,290
‫gestore degli errori, che prima non sarebbe il caso.

129
00:05:56,290 --> 00:05:57,180
‫Tutto ok?

130
00:05:57,180 --> 00:05:59,590
‫E ora, solo per fare

131
00:05:59,590 --> 00:06:03,120
‫un esperimento, cosa ne pensi se inserissimo questo

132
00:06:03,120 --> 00:06:06,100
‫codice proprio qui in questa funzione middleware?

133
00:06:06,100 --> 00:06:07,690
‫Cosa pensi che accadrà

134
00:06:07,690 --> 00:06:09,510
‫quando salviamo questo file ora?

135
00:06:09,510 --> 00:06:12,200
‫Quindi x non è ancora definito da nessuna parte,

136
00:06:12,200 --> 00:06:13,840
‫ma diamo un'occhiata a cosa succede

137
00:06:13,840 --> 00:06:15,373
‫quando eseguiamo questo codice.

138
00:06:16,980 --> 00:06:19,510
‫E così ora in realtà non abbiamo errori.

139
00:06:19,510 --> 00:06:21,300
‫O in realtà lo facciamo,

140
00:06:21,300 --> 00:06:24,130
‫ma è solo a causa del nostro rifiuto non

141
00:06:24,130 --> 00:06:26,020
‫gestito, dovuto al fatto che la

142
00:06:26,020 --> 00:06:27,920
‫nostra password qui è ancora sbagliata.

143
00:06:29,290 --> 00:06:32,170
‫Quindi, se lo salviamo e lo salviamo di

144
00:06:32,170 --> 00:06:34,560
‫nuovo, non dovresti vedere alcun errore.

145
00:06:34,560 --> 00:06:35,730
‫E infatti, non lo facciamo.

146
00:06:35,730 --> 00:06:36,953
‫E perché?

147
00:06:37,830 --> 00:06:40,940
‫Bene, è perché questa funzione middleware qui ovviamente

148
00:06:40,940 --> 00:06:42,450
‫viene chiamata solo

149
00:06:42,450 --> 00:06:45,220
‫non appena c'è effettivamente una richiesta, giusto?

150
00:06:45,220 --> 00:06:48,113
‫E quindi vediamo cosa succede quando facciamo una richiesta.

151
00:06:50,760 --> 00:06:54,180
‫E quindi facciamo una richiesta Ottieni tutti i tour.

152
00:06:54,180 --> 00:06:55,720
‫E aspettiamo.

153
00:06:55,720 --> 00:06:58,980
‫E qui otteniamo un "Qualcosa è andato molto storto! " messaggio di

154
00:06:58,980 --> 00:07:01,420
‫errore con la 500, ed

155
00:07:01,420 --> 00:07:03,560
‫è anche perché siamo

156
00:07:03,560 --> 00:07:05,820
‫ancora in modalità produzione, ok?

157
00:07:05,820 --> 00:07:08,990
‫Ma comunque, ricevere questo messaggio qui, ricorda, significa

158
00:07:08,990 --> 00:07:12,120
‫che abbiamo un errore non operativo qui.

159
00:07:12,120 --> 00:07:15,630
‫Quindi fondamentalmente un errore che non ci siamo creati noi.

160
00:07:15,630 --> 00:07:19,580
‫E quindi, proprio questo, ora entriamo

161
00:07:19,580 --> 00:07:24,380
‫qui nel nostro errorController, andiamo proprio qui, giusto?

162
00:07:24,380 --> 00:07:28,780
‫Quindi in questo altro ramo qui nella funzione sendErrorProd.

163
00:07:28,780 --> 00:07:30,380
‫E in effetti

164
00:07:30,380 --> 00:07:32,970
‫vedi l'errore anche qui nella console, ok?

165
00:07:32,970 --> 00:07:35,600
‫Ed è quello che succede quando

166
00:07:35,600 --> 00:07:39,430
‫c'è un errore all'interno di qualsiasi middleware Express, giusto?

167
00:07:39,430 --> 00:07:41,370
‫Quindi Express, quando si verifica

168
00:07:41,370 --> 00:07:44,480
‫un errore, passerà automaticamente al middleware di gestione degli

169
00:07:44,480 --> 00:07:46,330
‫errori con quell'errore, ok?

170
00:07:46,330 --> 00:07:48,100
‫Ed ecco perché quando

171
00:07:48,100 --> 00:07:50,410
‫riceviamo un errore qui in una

172
00:07:50,410 --> 00:07:55,240
‫qualsiasi delle nostre funzioni middleware, andrà immediatamente qui in questo gestore, ok?

173
00:07:55,240 --> 00:07:56,520
‫E poiché

174
00:07:56,520 --> 00:07:58,730
‫siamo in produzione, inserirà questo

175
00:07:58,730 --> 00:08:00,994
‫blocco qui, ma poiché non è

176
00:08:00,994 --> 00:08:03,700
‫un CastError, e non questo errore, e

177
00:08:03,700 --> 00:08:06,830
‫non un ValidationError, non appena l'errore viene effettivamente

178
00:08:06,830 --> 00:08:09,640
‫inviato, proprio qui, inseriamo questo blocco .

179
00:08:09,640 --> 00:08:14,640
‫E ancora, ecco perché inviamo questo errore generico, ok?

180
00:08:15,235 --> 00:08:17,500
‫Ora usciamo effettivamente da questa modalità qui

181
00:08:17,500 --> 00:08:20,053
‫e torniamo al nostro normale avvio di npm.

182
00:08:22,310 --> 00:08:26,130
‫E quindi in questo momento, il nostro errore verrà inviato in questo modo, giusto?

183
00:08:26,130 --> 00:08:29,440
‫Quindi inviare errore di sviluppo ci darà tutti i

184
00:08:29,440 --> 00:08:31,773
‫dettagli sull'errore che si sta verificando.

185
00:08:33,610 --> 00:08:38,490
‫E così ora effettivamente otteniamo ReferenceError: x non è definito.

186
00:08:38,490 --> 00:08:39,323
‫Bene?

187
00:08:39,323 --> 00:08:41,533
‫Quindi nell'app. js, riga 21.

188
00:08:42,480 --> 00:08:46,300
‫E così, la riga 21 è dov'è,

189
00:08:46,300 --> 00:08:47,520
‫ma liberiamocene.

190
00:08:47,520 --> 00:08:49,760
‫Volevo solo mostrartelo.

191
00:08:49,760 --> 00:08:51,350
‫Bene?

192
00:08:51,350 --> 00:08:53,770
‫Ad ogni modo, con questo, chiudiamo effettivamente la

193
00:08:53,770 --> 00:08:55,620
‫nostra sezione di gestione degli errori.

194
00:08:55,620 --> 00:08:58,830
‫E potrebbe esserci un intero corso sulla gestione degli

195
00:08:58,830 --> 00:09:01,940
‫errori con Node ed Express, perché è davvero

196
00:09:01,940 --> 00:09:03,830
‫un argomento follemente complesso.

197
00:09:03,830 --> 00:09:06,470
‫Ma, in questa sezione, impari gli elementi

198
00:09:06,470 --> 00:09:08,830
‫essenziali che devi sapere per iniziare

199
00:09:08,830 --> 00:09:10,943
‫davvero a creare applicazioni straordinarie.

