﻿1
00:00:01,150 --> 00:00:03,353
‫Jonas: In questo video

2
00:00:03,353 --> 00:00:06,390
‫implementeremo una logica per inviare diversi messaggi di

3
00:00:06,390 --> 00:00:09,173
‫errore per l'ambiente di sviluppo e produzione.

4
00:00:10,810 --> 00:00:14,490
‫Quindi in questo momento stiamo inviando lo stesso messaggio di risposta qui

5
00:00:14,490 --> 00:00:17,389
‫praticamente a tutti, non importa se siamo in fase di

6
00:00:17,389 --> 00:00:18,920
‫sviluppo o di produzione.

7
00:00:18,920 --> 00:00:21,690
‫Ma l'idea è che in produzione vogliamo far trapelare

8
00:00:21,690 --> 00:00:23,810
‫al cliente il minor numero possibile

9
00:00:23,810 --> 00:00:25,583
‫di informazioni sui nostri errori.

10
00:00:26,420 --> 00:00:28,490
‫Quindi, in tal caso, vogliamo solo inviare

11
00:00:28,490 --> 00:00:30,340
‫un messaggio carino e amichevole

12
00:00:30,340 --> 00:00:33,070
‫in modo che l'utente sappia cosa c'è che non va.

13
00:00:33,070 --> 00:00:34,858
‫D'altra parte, durante lo

14
00:00:34,858 --> 00:00:37,700
‫sviluppo scritto, vogliamo ottenere quante più informazioni possibili

15
00:00:37,700 --> 00:00:40,390
‫sull'errore che si è verificato e lo vogliamo

16
00:00:40,390 --> 00:00:42,950
‫proprio nel messaggio di errore che ritorna.

17
00:00:42,950 --> 00:00:45,520
‫Quindi potremmo registrare quelle informazioni anche sulla

18
00:00:45,520 --> 00:00:48,340
‫console, ma penso che sia molto più utile avere

19
00:00:48,340 --> 00:00:51,150
‫quelle informazioni direttamente nel postino, in questo caso.

20
00:00:51,150 --> 00:00:53,660
‫Quindi, sappiamo già come distinguere tra l'ambiente

21
00:00:53,660 --> 00:00:56,010
‫di sviluppo e quello di produzione.

22
00:00:56,870 --> 00:00:58,213
‫E così, facciamolo.

23
00:00:59,130 --> 00:00:59,963
‫Quindi,

24
00:01:01,630 --> 00:01:05,010
‫se il processo. avv. node_env è

25
00:01:06,510 --> 00:01:08,970
‫uguale a development, quindi vogliamo

26
00:01:11,810 --> 00:01:13,780
‫inviare un tipo di

27
00:01:15,530 --> 00:01:17,060
‫errore e se

28
00:01:17,060 --> 00:01:21,020
‫siamo in produzione, vogliamo inviare un errore più semplice.

29
00:01:21,020 --> 00:01:21,853
‫Bene.

30
00:01:24,290 --> 00:01:26,913
‫Quindi uguale alla produzione.

31
00:01:30,160 --> 00:01:33,343
‫Bene, quindi prendiamo questo, quindi di nuovo,

32
00:01:34,390 --> 00:01:36,380
‫quando lo sviluppo

33
00:01:36,380 --> 00:01:39,850
‫scritto, vogliamo ottenere tutte le informazioni che possiamo.

34
00:01:39,850 --> 00:01:43,763
‫Quindi anche qui stampa o rispondi con lo stack di errori.

35
00:01:48,620 --> 00:01:52,300
‫Quindi sbaglia. stack, quindi

36
00:01:52,300 --> 00:01:54,483
‫stampiamo anche l'intero errore.

37
00:01:56,240 --> 00:02:00,830
‫Diciamo errore e impostarlo su OK.

38
00:02:00,830 --> 00:02:02,003
‫Quindi, d'altra

39
00:02:03,030 --> 00:02:05,183
‫parte, ora copiamo questo di nuovo.

40
00:02:06,040 --> 00:02:09,350
‫Quando siamo in produzione, non vogliamo lo stack

41
00:02:09,350 --> 00:02:12,493
‫e non vogliamo nemmeno l'errore completo.

42
00:02:13,490 --> 00:02:16,113
‫Quindi in realtà solo lo stato e il messaggio.

43
00:02:19,190 --> 00:02:20,933
‫Questo qui sembra

44
00:02:21,930 --> 00:02:24,550
‫un po' disordinato, quindi esportiamoli nelle

45
00:02:24,550 --> 00:02:27,440
‫loro funzioni e anche perché aggiungeremo

46
00:02:27,440 --> 00:02:30,719
‫molto più codice qui, in quest'altro ramo.

47
00:02:30,719 --> 00:02:33,730
‫È un po' più pulito avere questi nelle

48
00:02:33,730 --> 00:02:35,180
‫loro funzioni separate.

49
00:02:36,500 --> 00:02:37,550
‫Quindi diciamo

50
00:02:39,540 --> 00:02:41,480
‫const send error for

51
00:02:43,930 --> 00:02:46,470
‫dev e quella funzione dovrebbe quindi

52
00:02:46,470 --> 00:02:49,903
‫ricevere l'errore, e dobbiamo anche passare l'oggetto della risposta.

53
00:02:51,990 --> 00:02:54,930
‫Questo perché è così che possiamo effettivamente

54
00:02:54,930 --> 00:02:57,223
‫inviare la risposta, giusto?

55
00:02:58,360 --> 00:03:02,090
‫Quindi abbiamo bisogno dell'oggetto della risposta per poter eseguire

56
00:03:02,090 --> 00:03:02,933
‫questo codice.

57
00:03:04,080 --> 00:03:06,510
‫Qui chiameremo send error

58
00:03:07,410 --> 00:03:08,990
‫dev con

59
00:03:09,890 --> 00:03:11,263
‫l'errore

60
00:03:11,263 --> 00:03:13,073
‫e la risposta.

61
00:03:14,270 --> 00:03:18,030
‫Quindi quaggiù, invieremo la produzione

62
00:03:18,030 --> 00:03:21,783
‫di errori, gli stessi

63
00:03:24,830 --> 00:03:26,253
‫argomenti.

64
00:03:36,300 --> 00:03:37,500
‫E poi qui, lo stesso.

65
00:03:43,041 --> 00:03:46,740
‫Quindi è stato facile, ora passiamo al livello successivo

66
00:03:46,740 --> 00:03:49,810
‫e parliamo di nuovo degli errori operativi.

67
00:03:49,810 --> 00:03:53,230
‫Per questo, consentitemi di aprire la classe di

68
00:03:53,230 --> 00:03:56,270
‫errore dell'app che abbiamo creato e ricordiamo

69
00:03:56,270 --> 00:03:57,870
‫che contrassegniamo tutti

70
00:03:57,870 --> 00:04:02,313
‫gli errori che creiamo, utilizzando AppError è operativo impostato su true.

71
00:04:03,721 --> 00:04:05,760
‫Quindi tutti gli errori che

72
00:04:05,760 --> 00:04:07,873
‫creiamo noi stessi saranno fondamentalmente errori operativi.

73
00:04:09,100 --> 00:04:11,950
‫In effetti, sono solo questi errori operativi per

74
00:04:11,950 --> 00:04:14,540
‫i quali vogliamo inviare il messaggio di

75
00:04:14,540 --> 00:04:15,703
‫errore al client.

76
00:04:16,720 --> 00:04:18,310
‫Almeno in produzione.

77
00:04:18,310 --> 00:04:21,900
‫Quindi, quando noi, d'altra parte, abbiamo un errore di programmazione,

78
00:04:21,900 --> 00:04:23,880
‫o qualche altro errore sconosciuto che

79
00:04:23,880 --> 00:04:26,500
‫proviene, ad esempio, da un pacchetto di

80
00:04:26,500 --> 00:04:29,930
‫terze parti, non vogliamo inviare alcun messaggio di errore

81
00:04:29,930 --> 00:04:31,864
‫al cliente in produzione.

82
00:04:31,864 --> 00:04:33,470
‫E quindi non serve.

83
00:04:33,470 --> 00:04:37,340
‫Questa è la proprietà operativa qui nel nostro controller di errore.

84
00:04:37,340 --> 00:04:40,090
‫Ricordi come ho già parlato

85
00:04:40,090 --> 00:04:43,693
‫di farlo quando abbiamo creato questa classe, giusto?

86
00:04:45,580 --> 00:04:48,780
‫Veniamo ora qui per inviare la produzione di errori e

87
00:04:49,730 --> 00:04:50,913
‫fare quel test.

88
00:04:52,270 --> 00:04:54,787
‫Se errore. isOperational solo

89
00:05:00,630 --> 00:05:05,053
‫in quel caso vogliamo effettivamente inviare questo errore qui.

90
00:05:06,940 --> 00:05:08,113
‫In tutti

91
00:05:10,070 --> 00:05:11,330
‫gli altri casi, invieremo

92
00:05:11,330 --> 00:05:14,580
‫semplicemente un messaggio di errore molto generico al client.

93
00:05:14,580 --> 00:05:17,310
‫Quindi diciamo, res. status e invieremo

94
00:05:19,400 --> 00:05:22,110
‫semplicemente un codice 500 generico e

95
00:05:23,930 --> 00:05:25,123
‫poi json.

96
00:05:28,120 --> 00:05:30,363
‫Lo stato sarà errore.

97
00:05:33,230 --> 00:05:36,660
‫Allora mandiamo un messaggio generico, dicendo che qualcosa

98
00:05:38,200 --> 00:05:39,033
‫è

99
00:05:41,360 --> 00:05:42,573
‫andato molto storto.

100
00:05:43,690 --> 00:05:46,983
‫Quindi fare qualcosa del genere è una procedura molto standard.

101
00:05:48,420 --> 00:05:51,133
‫Vorrei effettivamente commentare parte del codice qui.

102
00:05:54,530 --> 00:05:57,533
‫Quindi questo è un errore operativo di cui ci fidiamo.

103
00:06:03,700 --> 00:06:06,200
‫Qui vogliamo inviare un messaggio al cliente.

104
00:06:06,200 --> 00:06:07,503
‫Ma in

105
00:06:16,130 --> 00:06:17,973
‫questo caso abbiamo un errore

106
00:06:19,080 --> 00:06:22,673
‫sconosciuto, quindi non vogliamo divulgare i dettagli al cliente.

107
00:06:28,470 --> 00:06:31,380
‫Quindi invieremo questo messaggio al cliente e

108
00:06:31,380 --> 00:06:33,070
‫anche a noi stessi.

109
00:06:33,070 --> 00:06:35,340
‫Per noi sviluppatori, vogliamo sapere

110
00:06:35,340 --> 00:06:38,610
‫che si è verificato questo tipo di errore strano,

111
00:06:38,610 --> 00:06:41,993
‫inaspettato e sconosciuto e lo registreremo effettivamente sulla console.

112
00:06:49,100 --> 00:06:50,593
‫Prima registreremo

113
00:06:56,702 --> 00:06:59,369
‫l'errore, quindi invieremo un messaggio generico.

114
00:07:00,280 --> 00:07:03,270
‫Diciamo solo, consolare. errore, quindi è un po'

115
00:07:03,270 --> 00:07:05,490
‫come console. log, ma

116
00:07:05,490 --> 00:07:07,870
‫è davvero specifico per gli errori e

117
00:07:07,870 --> 00:07:10,670
‫credo che l'output sarà quindi un po' diverso.

118
00:07:12,090 --> 00:07:15,670
‫Quindi errore, aggiungiamo alcune emoji qui per renderlo visibile

119
00:07:15,670 --> 00:07:16,543
‫nei

120
00:07:17,950 --> 00:07:20,360
‫nostri registri, quindi registriamo anche l'errore.

121
00:07:20,360 --> 00:07:23,213
‫Ora ci sono vere librerie di log su mpm, che

122
00:07:23,213 --> 00:07:24,550
‫potremmo usare qui invece

123
00:07:24,550 --> 00:07:28,030
‫di avere solo questa semplice console. errore, ma la

124
00:07:28,030 --> 00:07:30,430
‫semplice registrazione dell'errore sulla console lo

125
00:07:30,430 --> 00:07:32,220
‫renderà visibile nei registri sulla

126
00:07:32,220 --> 00:07:34,363
‫piattaforma di hosting che stai utilizzando.

127
00:07:35,486 --> 00:07:39,200
‫Penso che per ora, in questo tipo di semplice

128
00:07:39,200 --> 00:07:40,073
‫applicazione, basti.

129
00:07:41,110 --> 00:07:42,860
‫Ad esempio, utilizzeremo Heroku entro

130
00:07:42,860 --> 00:07:45,710
‫la fine del corso per distribuire la nostra applicazione.

131
00:07:45,710 --> 00:07:47,600
‫Quindi, quando si verifica un

132
00:07:47,600 --> 00:07:49,970
‫errore come questo, verrà registrato nella console.

133
00:07:49,970 --> 00:07:54,180
‫Nella piattaforma Heroku, abbiamo quindi accesso a questi registri.

134
00:07:54,180 --> 00:07:57,080
‫Possiamo continuare a guardare questi registri e poi lì

135
00:07:57,080 --> 00:07:59,220
‫dentro troveremo questi errori imprevisti in

136
00:07:59,220 --> 00:08:00,670
‫modo da poterli correggere.

137
00:08:01,678 --> 00:08:04,470
‫In questo momento, stiamo già costruendo una sorta

138
00:08:04,470 --> 00:08:07,000
‫di meccanismo di gestione degli errori sofisticato e

139
00:08:07,000 --> 00:08:08,713
‫del mondo reale qui.

140
00:08:09,720 --> 00:08:13,240
‫Quindi ricapitoliamo rapidamente ciò che abbiamo appena fatto qui.

141
00:08:13,240 --> 00:08:16,380
‫Distinguiamo tra errori di sviluppo e di

142
00:08:16,380 --> 00:08:17,373
‫produzione.

143
00:08:18,720 --> 00:08:21,420
‫Quando siamo in produzione, inviamo l'errore usando

144
00:08:21,420 --> 00:08:22,970
‫questa funzione qui,

145
00:08:22,970 --> 00:08:26,050
‫che poi invierà quanti più dettagli possibili al

146
00:08:26,050 --> 00:08:27,340
‫cliente, in

147
00:08:27,340 --> 00:08:28,997
‫modo che otteniamo davvero

148
00:08:28,997 --> 00:08:31,730
‫tutte le informazioni per eliminare il bug.

149
00:08:31,730 --> 00:08:33,332
‫Se si tratta di

150
00:08:33,332 --> 00:08:35,670
‫un errore di programmazione o di

151
00:08:35,670 --> 00:08:39,083
‫un errore operativo, vogliamo comunque vedere cosa sta succedendo.

152
00:08:40,670 --> 00:08:42,000
‫Quando siamo

153
00:08:42,000 --> 00:08:44,330
‫in produzione, che è probabilmente la

154
00:08:44,330 --> 00:08:47,090
‫parte più importante della nostra applicazione, distinguiamo

155
00:08:47,090 --> 00:08:48,590
‫tra errori operativi, quindi

156
00:08:48,590 --> 00:08:50,950
‫errori che conosciamo e di cui

157
00:08:50,950 --> 00:08:54,163
‫ci fidiamo, e altri errori, che potrebbero essere inaspettati.

158
00:08:55,660 --> 00:08:58,800
‫Se l'errore è operativo, quindi ad esempio l'utente ha tentato di

159
00:08:58,800 --> 00:09:01,530
‫accedere a un percorso che non esiste o ha

160
00:09:01,530 --> 00:09:03,680
‫cercato di inserire dati non validi, tutti

161
00:09:03,680 --> 00:09:05,253
‫questi sono errori operativi.

162
00:09:05,253 --> 00:09:08,130
‫Quindi possiamo inviare messaggi di errore appropriati, affinché

163
00:09:08,130 --> 00:09:10,880
‫il cliente sappia cosa è andato storto.

164
00:09:10,880 --> 00:09:13,820
‫D'altra parte, abbiamo questi errori sconosciuti, o

165
00:09:13,820 --> 00:09:16,380
‫errori imprevisti, e in quel

166
00:09:16,380 --> 00:09:19,420
‫caso, diciamo molto semplicemente, qualcosa è andato storto.

167
00:09:19,420 --> 00:09:21,670
‫Quindi registra l'errore anche sulla nostra console, in

168
00:09:21,670 --> 00:09:24,433
‫modo che sappiamo che è successo e possiamo quindi risolverlo.

169
00:09:25,510 --> 00:09:27,080
‫Ora, affinché funzioni, c'è

170
00:09:27,080 --> 00:09:29,160
‫qualcosa di veramente, molto importante che

171
00:09:29,160 --> 00:09:30,193
‫dobbiamo fare.

172
00:09:31,040 --> 00:09:33,340
‫In questo momento ci sono errori

173
00:09:33,340 --> 00:09:37,550
‫che provengono, ad esempio, da MongoDB, che non contrassegniamo come operativi.

174
00:09:37,550 --> 00:09:40,970
‫In questo caso, in questo momento verrebbero semplicemente gestiti utilizzando

175
00:09:40,970 --> 00:09:43,500
‫questo messaggio di errore generico qui.

176
00:09:43,500 --> 00:09:45,330
‫Ad esempio, un errore di convalida.

177
00:09:45,330 --> 00:09:48,000
‫In questo momento, questo è un errore che

178
00:09:48,000 --> 00:09:51,356
‫proviene da MongoDB e non dalla nostra classe di errore dell'app.

179
00:09:51,356 --> 00:09:54,869
‫Non creiamo questi errori da soli.

180
00:09:54,869 --> 00:09:58,800
‫Ancora una volta, al momento non sono contrassegnati come operativi,

181
00:09:58,800 --> 00:10:02,130
‫ma ovviamente dobbiamo contrassegnarli come operativi in modo

182
00:10:02,130 --> 00:10:04,680
‫da poter inviare il messaggio di

183
00:10:04,680 --> 00:10:06,400
‫errore appropriato al client.

184
00:10:06,400 --> 00:10:08,360
‫Nell'esempio che stavo appena menzionando, i dati

185
00:10:08,360 --> 00:10:10,263
‫di input non sono validi.

186
00:10:11,250 --> 00:10:14,230
‫Ci sono altri due o tre errori che dobbiamo contrassegnare

187
00:10:14,230 --> 00:10:15,793
‫come operativi noi stessi.

188
00:10:16,930 --> 00:10:18,020
‫Quindi

189
00:10:19,410 --> 00:10:20,670
‫lo faremo quaggiù.

190
00:10:20,670 --> 00:10:22,193
‫Quindi, in quest'altro

191
00:10:23,400 --> 00:10:25,850
‫blocco, lo faremo nelle prossime due lezioni.

