﻿1
00:00:00,920 --> 00:00:02,913
‫-: Quindi, come ho detto

2
00:00:02,913 --> 00:00:05,243
‫nell'ultimo video, ci sono tre tipi di

3
00:00:05,243 --> 00:00:07,525
‫errori che potrebbero essere creati da

4
00:00:07,525 --> 00:00:10,520
‫Mongoose in cui dobbiamo contrassegnare come errori operativi

5
00:00:10,520 --> 00:00:13,700
‫in modo da poter inviare messaggi di errore significativi

6
00:00:13,700 --> 00:00:15,383
‫ai clienti in produzione.

7
00:00:16,890 --> 00:00:21,290
‫E ora iniziamo simulando questi tre errori, ok?

8
00:00:21,290 --> 00:00:25,263
‫Quindi il primo è quando proviamo un ID non valido qui,

9
00:00:26,240 --> 00:00:28,180
‫quindi semplicemente qualcosa del

10
00:00:28,180 --> 00:00:30,950
‫genere, e quindi Mongoose non sarà in grado

11
00:00:30,950 --> 00:00:33,427
‫di convertirlo in un ID MongoDB, ricordalo.

12
00:00:33,427 --> 00:00:36,799
‫E quindi questo è l'errore che otteniamo in questo momento, e

13
00:00:36,799 --> 00:00:39,650
‫in realtà, qui puoi vedere tutto il tipo

14
00:00:39,650 --> 00:00:42,950
‫di cose che abbiamo definito che volevamo vedere nelle produzioni.

15
00:00:42,950 --> 00:00:47,010
‫Quindi l'intero oggetto errore, quindi il messaggio di

16
00:00:47,010 --> 00:00:50,590
‫errore e anche lo stack completo, ok?

17
00:00:50,590 --> 00:00:53,180
‫E quindi questo è un perfetto esempio

18
00:00:53,180 --> 00:00:54,500
‫di errore operativo.

19
00:00:54,500 --> 00:00:57,160
‫Quindi questo è qualcosa che potrebbe benissimo

20
00:00:57,160 --> 00:01:00,060
‫accadere, e quindi dobbiamo inviare una risposta

21
00:01:00,060 --> 00:01:02,380
‫significativa per gestire questo errore.

22
00:01:02,380 --> 00:01:05,590
‫E questo è un perfetto esempio di un errore operativo che

23
00:01:05,590 --> 00:01:09,260
‫è molto probabile che a un certo punto accada a un cliente,

24
00:01:09,260 --> 00:01:11,740
‫quindi dobbiamo gestirlo come tale, va bene?

25
00:01:11,740 --> 00:01:14,607
‫Quindi, fondamentalmente inviando un bel messaggio di

26
00:01:14,607 --> 00:01:16,690
‫errore invece di qualcosa del

27
00:01:16,690 --> 00:01:20,181
‫genere, che non significa nulla per nessun cliente, giusto?

28
00:01:20,181 --> 00:01:22,500
‫Ok, quindi l'obiettivo qui sarà

29
00:01:22,500 --> 00:01:26,120
‫di nuovo sostanzialmente contrassegnare questo errore come operativo

30
00:01:26,120 --> 00:01:28,880
‫e creare un messaggio significativo, ok?

31
00:01:28,880 --> 00:01:30,580
‫Ma prima di poterlo

32
00:01:30,580 --> 00:01:32,620
‫fare, diamo un'occhiata agli altri due

33
00:01:32,620 --> 00:01:36,260
‫errori di Mongoose che dovremo anche contrassegnare come operativi, ok?

34
00:01:36,260 --> 00:01:38,457
‫Quindi, creiamo un nuovo

35
00:01:38,457 --> 00:01:43,236
‫tour e quello che farò è creare un nome duplicato.

36
00:01:43,236 --> 00:01:46,210
‫Quindi, copiamo questo qui.

37
00:01:50,347 --> 00:01:52,503
‫E penso che tutti i

38
00:01:52,503 --> 00:01:54,780
‫valori qui siano corretti, quindi proviamolo ora.

39
00:01:54,780 --> 00:01:58,520
‫E infatti, qui otteniamo l'errore che già conosciamo, che è

40
00:01:58,520 --> 00:02:00,210
‫errore di chiave

41
00:02:00,210 --> 00:02:01,960
‫duplicato perché abbiamo già un

42
00:02:01,960 --> 00:02:05,740
‫tour o un documento con il nome di Forest Hiker, ok?

43
00:02:05,740 --> 00:02:07,440
‫Quindi, di nuovo, questo è un

44
00:02:07,440 --> 00:02:09,420
‫errore che si verificherà ad un certo

45
00:02:09,420 --> 00:02:10,720
‫punto e, di

46
00:02:10,720 --> 00:02:13,650
‫nuovo, non ha un messaggio di errore molto significativo, giusto?

47
00:02:13,650 --> 00:02:16,243
‫E quindi, di nuovo, dobbiamo cambiarlo.

48
00:02:17,200 --> 00:02:19,954
‫Quindi il terzo riguarda anche

49
00:02:19,954 --> 00:02:23,980
‫la convalida, quindi facciamolo qui in Update Tour.

50
00:02:23,980 --> 00:02:27,835
‫Quindi, diciamo che vogliamo avere una media di rating di

51
00:02:27,835 --> 00:02:30,700
‫sei, che sappiamo non essere valida, giusto?

52
00:02:30,700 --> 00:02:33,430
‫Perché abbiamo detto che il massimo delle valutazioniAverage

53
00:02:33,430 --> 00:02:34,960
‫potrebbe essere cinque.

54
00:02:34,960 --> 00:02:36,720
‫Quindi vediamo,

55
00:02:36,720 --> 00:02:40,891
‫e in effetti, otteniamo questo ValidationError, giusto?

56
00:02:40,891 --> 00:02:43,300
‫Quindi si chiama ValidationError

57
00:02:43,300 --> 00:02:47,600
‫e ha questo oggetto errors con tutti gli errori.

58
00:02:47,600 --> 00:02:49,400
‫In realtà ne mettiamo un altro qui.

59
00:02:51,377 --> 00:02:53,183
‫Quindi diciamo difficoltà,

60
00:02:55,229 --> 00:02:57,110
‫e poi qualcos'altro, quindi

61
00:02:57,110 --> 00:02:59,981
‫uno che non sia facile, medio o

62
00:02:59,981 --> 00:03:03,540
‫difficile, e quindi ora otteniamo questi due oggetti qui.

63
00:03:03,540 --> 00:03:08,090
‫Quelli per le valutazioni e uno per la difficoltà, va bene?

64
00:03:08,090 --> 00:03:09,800
‫Quindi questi sono

65
00:03:09,800 --> 00:03:11,740
‫i tre errori che

66
00:03:11,740 --> 00:03:14,110
‫contrassegneremo come operativi, a partire da

67
00:03:14,110 --> 00:03:17,540
‫questo primo, quindi fondamentalmente, il tipo CastError, ok?

68
00:03:17,540 --> 00:03:20,250
‫Quindi, torniamo qui, e lo faremo

69
00:03:20,250 --> 00:03:24,260
‫di nuovo qui, perché vogliamo farlo solo in produzione, ok?

70
00:03:24,260 --> 00:03:26,570
‫In fase di sviluppo, non ci interessa niente di tutto questo.

71
00:03:26,570 --> 00:03:28,576
‫Tutto ciò che vogliamo fare è

72
00:03:28,576 --> 00:03:30,910
‫vedere i nostri errori in modo che possiamo

73
00:03:30,910 --> 00:03:33,220
‫sostanzialmente risolverli, ma in produzione, è qui

74
00:03:33,220 --> 00:03:36,110
‫che vogliamo inviare i messaggi di errore significativi ai client.

75
00:03:36,110 --> 00:03:40,690
‫Quindi, diciamo se sbagli. name è uguale

76
00:03:40,690 --> 00:03:45,690
‫a CastError, quindi è così che identificheremo questo tipo

77
00:03:45,980 --> 00:03:48,400
‫di errore di cui

78
00:03:48,400 --> 00:03:51,000
‫abbiamo appena parlato, perché

79
00:03:51,000 --> 00:03:55,300
‫ha il nome di CastError, va bene?

80
00:03:55,300 --> 00:03:57,564
‫Quindi se sbagli. name

81
00:03:57,564 --> 00:04:02,230
‫è CastError, allora chiameremo una funzione speciale che creeremo

82
00:04:02,230 --> 00:04:03,880
‫in un secondo,

83
00:04:03,880 --> 00:04:06,097
‫che si chiama handleCastError.

84
00:04:10,750 --> 00:04:14,290
‫E poi dirò anche qui DB per database,

85
00:04:14,290 --> 00:04:18,320
‫così sappiamo che questo è correlato al nostro database, ok?

86
00:04:18,320 --> 00:04:19,920
‫Ed è così che funzionerà.

87
00:04:19,920 --> 00:04:21,470
‫Passeremo l'errore creato

88
00:04:21,470 --> 00:04:23,683
‫da Mongoose in questa funzione,

89
00:04:24,720 --> 00:04:27,070
‫quindi proprio come questo, e questo

90
00:04:27,070 --> 00:04:30,840
‫restituirà un nuovo errore creato senza la classe AppError, ok?

91
00:04:30,840 --> 00:04:33,930
‫E quell'errore verrà quindi contrassegnato come operativo, perché

92
00:04:33,930 --> 00:04:36,120
‫ricorda, tutti i nostri AppError

93
00:04:36,120 --> 00:04:38,030
‫hanno le proprietà

94
00:04:38,030 --> 00:04:40,523
‫operative impostate su due automaticamente, giusto?

95
00:04:41,820 --> 00:04:46,390
‫Quindi questo restituirà un errore, quindi salviamolo, ok?

96
00:04:46,390 --> 00:04:49,260
‫E così lo stavano salvando in errore.

97
00:04:49,260 --> 00:04:51,050
‫Ora non è affatto

98
00:04:51,050 --> 00:04:54,700
‫una buona pratica sovrascrivere gli argomenti di una funzione, ok?

99
00:04:54,700 --> 00:04:57,930
‫Quindi l'errore deriva da questa funzione di errore centrale, giusto?

100
00:04:57,930 --> 00:05:01,020
‫Quindi, da qui, e quindi invece

101
00:05:01,020 --> 00:05:03,217
‫di farlo, creerò effettivamente

102
00:05:03,217 --> 00:05:06,516
‫una copia cartacea di quell'oggetto errore, ok?

103
00:05:06,516 --> 00:05:09,760
‫Quindi let, e sto usando let e non const,

104
00:05:09,760 --> 00:05:11,700
‫perché ovviamente riassegniamo un

105
00:05:11,700 --> 00:05:14,043
‫nuovo errore in seguito, più avanti qui.

106
00:05:15,490 --> 00:05:18,820
‫Quindi, chiamiamo questo errore invece di solo err,

107
00:05:18,820 --> 00:05:22,250
‫che è il nome normale degli errori in Express.

108
00:05:22,250 --> 00:05:24,710
‫E così ancora, useremo il

109
00:05:24,710 --> 00:05:29,133
‫nostro trucco per cui usiamo la destrutturazione dell'errore originale, ok?

110
00:05:30,930 --> 00:05:34,257
‫E così, d'ora in poi, useremo questo errore invece di err.

111
00:05:35,620 --> 00:05:38,963
‫Quindi qui, e qui, e qui.

112
00:05:41,720 --> 00:05:42,770
‫Bene?

113
00:05:42,770 --> 00:05:44,890
‫E quindi, ora andiamo avanti

114
00:05:44,890 --> 00:05:47,223
‫e creiamo effettivamente questa funzione qui.

115
00:05:49,580 --> 00:05:52,883
‫Quindi mettiamolo qui proprio all'inizio.

116
00:05:56,247 --> 00:05:57,413
‫Bene.

117
00:05:58,270 --> 00:06:00,680
‫Cerca di ricordare che questo riceve un

118
00:06:00,680 --> 00:06:04,210
‫errore, e ora tornerò a chiamarlo semplicemente err in questo modo,

119
00:06:04,210 --> 00:06:07,320
‫perché di nuovo è una specie di standard in Express.

120
00:06:07,320 --> 00:06:09,020
‫E per iniziare,

121
00:06:09,020 --> 00:06:12,910
‫diamo un'occhiata di nuovo all'oggetto errore qui, ok?

122
00:06:12,910 --> 00:06:17,910
‫Quindi qui abbiamo il percorso e abbiamo anche il valore, ok?

123
00:06:18,290 --> 00:06:21,280
‫Quindi il percorso qui è fondamentalmente il nome del

124
00:06:21,280 --> 00:06:25,000
‫campo per il quale i dati di input sono nel formato sbagliato, ok?

125
00:06:25,000 --> 00:06:27,860
‫E quel valore qui è poi questo, che

126
00:06:27,860 --> 00:06:31,050
‫è, ovviamente, quello che abbiamo fatto in passato, va bene?

127
00:06:31,050 --> 00:06:34,200
‫Quindi, questo potrebbe accadere non solo per l'ID, ma in

128
00:06:34,200 --> 00:06:36,450
‫realtà per qualsiasi campo che interroghiamo

129
00:06:36,450 --> 00:06:39,370
‫con un valore nel formato sbagliato, va bene?

130
00:06:39,370 --> 00:06:41,270
‫E quindi, ora creiamo fondamentalmente

131
00:06:41,270 --> 00:06:43,330
‫una stringa che dice che abbiamo

132
00:06:43,330 --> 00:06:48,330
‫un ID non valido con il valore di questo in questo caso, va bene?

133
00:06:48,360 --> 00:06:53,360
‫Quindi, è percorso e valore, ok?

134
00:06:53,530 --> 00:06:55,873
‫Quindi, creiamo un messaggio qui e diciamo

135
00:06:59,780 --> 00:07:01,770
‫Invalid err. il percorso è

136
00:07:08,328 --> 00:07:09,411
‫errato. valore.

137
00:07:13,870 --> 00:07:15,250
‫Bene?

138
00:07:15,250 --> 00:07:17,813
‫E così ora, restituiamo semplicemente il nostro AppError.

139
00:07:18,990 --> 00:07:20,227
‫Bene?

140
00:07:20,227 --> 00:07:24,270
‫Quindi, proprio come ho già detto un paio di volte, ok?

141
00:07:24,270 --> 00:07:27,740
‫Quindi AppError, e in realtà devo includerlo qui,

142
00:07:27,740 --> 00:07:30,933
‫o richiederlo, perché non l'ho ancora fatto.

143
00:07:31,940 --> 00:07:35,633
‫Quindi const AppError è uguale a require e si sposta

144
00:07:39,150 --> 00:07:42,620
‫di un livello verso l'alto, quindi nella cartella delle

145
00:07:42,620 --> 00:07:45,213
‫utilità e quindi in appError.

146
00:07:46,350 --> 00:07:47,183
‫Ecco qui.

147
00:07:48,150 --> 00:07:52,570
‫E così ora, in o AppError, passiamo il nostro messaggio e

148
00:07:52,570 --> 00:07:56,860
‫il codice di stato 400, che sta per Bad Request.

149
00:07:56,860 --> 00:07:59,040
‫Ok, e così, proprio così, trasformiamo

150
00:07:59,040 --> 00:08:00,940
‫lo strano errore che stavamo

151
00:08:00,940 --> 00:08:02,640
‫ricevendo da Mongoose in un

152
00:08:02,640 --> 00:08:04,110
‫errore operativo con un

153
00:08:04,110 --> 00:08:06,354
‫simpatico messaggio amichevole che (ridacchia) un

154
00:08:06,354 --> 00:08:07,187
‫vero

155
00:08:07,187 --> 00:08:09,343
‫essere umano può leggere, va bene?

156
00:08:10,684 --> 00:08:13,270
‫Ok, un'ultima cosa che dobbiamo

157
00:08:13,270 --> 00:08:18,150
‫cambiare qui è impostare anche questo qui su errore, ok?

158
00:08:18,150 --> 00:08:21,750
‫E quindi, in questo momento, se il nostro errore

159
00:08:21,750 --> 00:08:24,770
‫è CastError, bene, passeremo l'errore a questa funzione

160
00:08:24,770 --> 00:08:27,790
‫che restituirà il nostro AppError, quindi questo,

161
00:08:27,790 --> 00:08:31,430
‫e questo è quello che verrà quindi inviato al

162
00:08:31,430 --> 00:08:34,180
‫client utilizzando il nostro sendErrorProd, bene?

163
00:08:34,180 --> 00:08:36,123
‫E quindi, ora proviamoci davvero.

164
00:08:37,080 --> 00:08:39,060
‫Quindi qui, nel nostro pacchetto. json,

165
00:08:39,060 --> 00:08:43,627
‫abbiamo questo script start:prod, quindi proviamolo.

166
00:08:43,627 --> 00:08:48,627
‫Quindi, npm run start: prod, e posso effettivamente completare automaticamente questi nomi

167
00:08:50,250 --> 00:08:54,580
‫di script npm usando la scheda qui nel terminale, ok?

168
00:08:54,580 --> 00:08:56,420
‫E quindi, questo avvierà

169
00:08:56,420 --> 00:08:59,640
‫un processo in modalità di produzione, fondamentalmente, ok?

170
00:08:59,640 --> 00:09:01,060
‫E quindi, ora proviamo di nuovo.

171
00:09:01,060 --> 00:09:02,580
‫Quindi, se stai facendo questa

172
00:09:02,580 --> 00:09:04,350
‫richiesta, dovremmo ricevere il messaggio di

173
00:09:04,350 --> 00:09:07,500
‫errore che abbiamo appena creato, perché in questo momento siamo in produzione.

174
00:09:07,500 --> 00:09:10,060
‫E infatti, eccolo qui.

175
00:09:10,060 --> 00:09:12,530
‫Quindi abbiamo non valido, quindi il nome del campo, o

176
00:09:12,530 --> 00:09:15,010
‫in realtà il nome del percorso, e quindi il valore

177
00:09:15,010 --> 00:09:15,843
‫che abbiamo inserito.

178
00:09:17,130 --> 00:09:19,194
‫Quindi, se proviamo qualcosa

179
00:09:19,194 --> 00:09:21,730
‫di diverso, ovviamente otteniamo questo

180
00:09:21,730 --> 00:09:25,450
‫e, naturalmente, anche il nostro codice 400 Bad Request.

181
00:09:25,450 --> 00:09:26,650
‫Ok, fantastico.

182
00:09:26,650 --> 00:09:28,533
‫Quindi, questo è ora gestito.

183
00:09:28,533 --> 00:09:32,210
‫Nella prossima lezione, ci occuperemo poi della prossima, che è

184
00:09:32,210 --> 00:09:35,440
‫per i nomi di campo duplicati, va bene?

185
00:09:35,440 --> 00:09:36,890
‫Allora, ci vediamo tra un secondo.

