﻿1
00:00:00,920 --> 00:00:02,913
‫-: Wie ich im letzten

2
00:00:02,913 --> 00:00:05,243
‫Video erwähnt habe, gibt es drei

3
00:00:05,243 --> 00:00:07,525
‫Arten von Fehlern, die von Mongoose

4
00:00:07,525 --> 00:00:10,520
‫erzeugt werden können, die wir als Betriebsfehler markieren

5
00:00:10,520 --> 00:00:13,700
‫müssen, damit wir aussagekräftige Fehlermeldungen an Kunden in der

6
00:00:13,700 --> 00:00:15,383
‫Produktion zurücksenden können.

7
00:00:16,890 --> 00:00:21,290
‫Und jetzt beginnen wir mit der Simulation dieser drei Fehler, okay?

8
00:00:21,290 --> 00:00:25,263
‫Die erste ist, wenn wir hier eine ungültige ID versuchen,

9
00:00:26,240 --> 00:00:28,180
‫also einfach so etwas,

10
00:00:28,180 --> 00:00:30,950
‫und Mongoose wird dies nicht in eine

11
00:00:30,950 --> 00:00:33,427
‫MongoDB-ID konvertieren können, denken Sie daran.

12
00:00:33,427 --> 00:00:36,799
‫Dies ist also der Fehler, den wir gerade bekommen, und

13
00:00:36,799 --> 00:00:39,650
‫eigentlich können Sie hier all das Zeug sehen,

14
00:00:39,650 --> 00:00:42,950
‫das wir definiert haben, das wir in Produktionen sehen wollten.

15
00:00:42,950 --> 00:00:47,010
‫Also das gesamte Fehlerobjekt, dann die Fehlermeldung

16
00:00:47,010 --> 00:00:50,590
‫und auch der komplette Stack, okay?

17
00:00:50,590 --> 00:00:53,180
‫Dies ist also ein perfektes Beispiel

18
00:00:53,180 --> 00:00:54,500
‫für einen Bedienungsfehler.

19
00:00:54,500 --> 00:00:57,160
‫Dies kann also sehr gut passieren,

20
00:00:57,160 --> 00:01:00,060
‫und wir müssen eine aussagekräftige Antwort zurücksenden,

21
00:01:00,060 --> 00:01:02,380
‫um diesen Fehler zu beheben.

22
00:01:02,380 --> 00:01:05,590
‫Und dies ist ein perfektes Beispiel für einen Bedienungsfehler,

23
00:01:05,590 --> 00:01:09,260
‫der einem Kunden sehr wahrscheinlich irgendwann passiert, und wir müssen ihn

24
00:01:09,260 --> 00:01:11,740
‫also als einen behandeln, in Ordnung?

25
00:01:11,740 --> 00:01:14,607
‫Also, im Grunde durch das Senden einer

26
00:01:14,607 --> 00:01:16,690
‫netten Fehlermeldung anstelle von

27
00:01:16,690 --> 00:01:20,181
‫so etwas, was für keinen Client etwas bedeutet, oder?

28
00:01:20,181 --> 00:01:22,500
‫Okay, das Ziel hier wird

29
00:01:22,500 --> 00:01:26,120
‫es wieder sein, diesen Fehler grundsätzlich als betriebsbereit zu markieren

30
00:01:26,120 --> 00:01:28,880
‫und eine aussagekräftige Nachricht zu erstellen, in Ordnung?

31
00:01:28,880 --> 00:01:30,580
‫Aber bevor wir das tun

32
00:01:30,580 --> 00:01:32,620
‫können, werfen wir einen Blick auf

33
00:01:32,620 --> 00:01:36,260
‫die anderen beiden Mungo-Fehler, die wir ebenfalls als betriebsbereit markieren müssen, okay?

34
00:01:36,260 --> 00:01:38,457
‫Lassen Sie uns also

35
00:01:38,457 --> 00:01:43,236
‫eine neue Tour erstellen, und ich werde einen doppelten Namen erstellen.

36
00:01:43,236 --> 00:01:46,210
‫Also, lass uns diesen hier einfach kopieren.

37
00:01:50,347 --> 00:01:52,503
‫Und ich denke, alle Werte hier

38
00:01:52,503 --> 00:01:54,780
‫sind richtig, also versuchen wir es jetzt.

39
00:01:54,780 --> 00:01:58,520
‫Und tatsächlich erhalten wir hier den Fehler, den wir bereits

40
00:01:58,520 --> 00:02:00,210
‫kennen, nämlich einen doppelten

41
00:02:00,210 --> 00:02:01,960
‫Schlüsselfehler, weil wir bereits eine

42
00:02:01,960 --> 00:02:05,740
‫Tour oder ein Dokument mit dem Namen Forest Hiker haben, okay?

43
00:02:05,740 --> 00:02:07,440
‫Dies ist also wieder

44
00:02:07,440 --> 00:02:09,420
‫ein Fehler, der irgendwann auftreten

45
00:02:09,420 --> 00:02:10,720
‫wird, und auch

46
00:02:10,720 --> 00:02:13,650
‫hier gibt es keine sehr aussagekräftige Fehlermeldung, oder?

47
00:02:13,650 --> 00:02:16,243
‫Und das müssen wir wieder ändern.

48
00:02:17,200 --> 00:02:19,954
‫Dann geht es beim dritten auch

49
00:02:19,954 --> 00:02:23,980
‫um Validierung, und das machen wir hier in der Update Tour.

50
00:02:23,980 --> 00:02:27,835
‫Nehmen wir an, wir möchten einen Bewertungsdurchschnitt von sechs haben, von

51
00:02:27,835 --> 00:02:30,700
‫dem wir wissen, dass er ungültig ist, oder?

52
00:02:30,700 --> 00:02:33,430
‫Weil wir gesagt haben, dass der maximale Durchschnitt der

53
00:02:33,430 --> 00:02:34,960
‫Bewertungen fünf sein könnte.

54
00:02:34,960 --> 00:02:36,720
‫Mal sehen,

55
00:02:36,720 --> 00:02:40,891
‫und tatsächlich bekommen wir diesen ValidationError, richtig?

56
00:02:40,891 --> 00:02:43,300
‫Es wird also als

57
00:02:43,300 --> 00:02:47,600
‫ValidationError bezeichnet und enthält dieses Fehlerobjekt mit allen Fehlern.

58
00:02:47,600 --> 00:02:49,400
‫Lassen Sie uns hier noch einen anderen setzen.

59
00:02:51,377 --> 00:02:53,183
‫Sagen wir also Schwierigkeit

60
00:02:55,229 --> 00:02:57,110
‫und dann noch etwas anderes,

61
00:02:57,110 --> 00:02:59,981
‫also eine, die nicht leicht, mittel oder schwierig

62
00:02:59,981 --> 00:03:03,540
‫ist, und so erhalten wir jetzt diese beiden Objekte hier.

63
00:03:03,540 --> 00:03:08,090
‫Eine für die Bewertungen und eine für den Schwierigkeitsgrad, in Ordnung?

64
00:03:08,090 --> 00:03:09,800
‫Dies sind also

65
00:03:09,800 --> 00:03:11,740
‫die drei Fehler, die wir

66
00:03:11,740 --> 00:03:14,110
‫als betriebsbereit markieren werden, beginnend mit

67
00:03:14,110 --> 00:03:17,540
‫diesem ersten, also im Grunde der Typ CastError, okay?

68
00:03:17,540 --> 00:03:20,250
‫Also, lass uns hierher zurückkehren und das machen

69
00:03:20,250 --> 00:03:24,260
‫wir hier noch einmal, weil wir das nur in der Produktion machen wollen, okay?

70
00:03:24,260 --> 00:03:26,570
‫In der Entwicklung ist uns das alles egal.

71
00:03:26,570 --> 00:03:28,576
‫Wir wollen nur unsere Fehler

72
00:03:28,576 --> 00:03:30,910
‫sehen, um sie grundsätzlich beheben zu können,

73
00:03:30,910 --> 00:03:33,220
‫aber in der Produktion wollen wir

74
00:03:33,220 --> 00:03:36,110
‫hier die aussagekräftigen Fehlermeldungen an die Clients senden.

75
00:03:36,110 --> 00:03:40,690
‫Sagen wir also, wenn err. name ist gleich

76
00:03:40,690 --> 00:03:45,690
‫CastError, und so werden wir diese Art von Fehler

77
00:03:45,980 --> 00:03:48,400
‫hier identifizieren, über die

78
00:03:48,400 --> 00:03:51,000
‫wir gerade gesprochen haben,

79
00:03:51,000 --> 00:03:55,300
‫weil sie den Namen CastError hat, in Ordnung?

80
00:03:55,300 --> 00:03:57,564
‫Also wenn irr. name ist

81
00:03:57,564 --> 00:04:02,230
‫CastError, dann rufen wir eine spezielle Funktion auf, die wir

82
00:04:02,230 --> 00:04:03,880
‫in einer Sekunde

83
00:04:03,880 --> 00:04:06,097
‫erstellen werden, die handleCastError heißt.

84
00:04:10,750 --> 00:04:14,290
‫Und dann sage ich hier auch DB für

85
00:04:14,290 --> 00:04:18,320
‫Datenbank, damit wir wissen, dass dies mit unserer Datenbank zusammenhängt, okay?

86
00:04:18,320 --> 00:04:19,920
‫Und so wird es funktionieren.

87
00:04:19,920 --> 00:04:21,470
‫Wir werden den Fehler,

88
00:04:21,470 --> 00:04:23,683
‫den Mongoose erstellt hat, an diese

89
00:04:24,720 --> 00:04:27,070
‫Funktion übergeben, also einfach so, und dies

90
00:04:27,070 --> 00:04:30,840
‫wird dann einen neuen Fehler zurückgeben, der ohne AppError-Klasse erstellt wurde, okay?

91
00:04:30,840 --> 00:04:33,930
‫Und dieser Fehler wird dann als betriebsbereit markiert, denn

92
00:04:33,930 --> 00:04:36,120
‫denken Sie daran, dass bei allen

93
00:04:36,120 --> 00:04:38,030
‫unseren AppErrors die is

94
00:04:38,030 --> 00:04:40,523
‫operational-Eigenschaften automatisch auf zwei gesetzt sind, oder?

95
00:04:41,820 --> 00:04:46,390
‫Das wird also einen Fehler zurückgeben, also speichern wir das, okay?

96
00:04:46,390 --> 00:04:49,260
‫Und so wurde das irrtümlicherweise gespeichert.

97
00:04:49,260 --> 00:04:51,050
‫Es ist jetzt überhaupt

98
00:04:51,050 --> 00:04:54,700
‫keine gute Praxis, die Argumente einer Funktion zu überschreiben, okay?

99
00:04:54,700 --> 00:04:57,930
‫Der Fehler kommt also von dieser mittleren Fehlerfunktion, oder?

100
00:04:57,930 --> 00:05:01,020
‫Anstatt dies zu tun, werde ich

101
00:05:01,020 --> 00:05:03,217
‫von hier aus

102
00:05:03,217 --> 00:05:06,516
‫tatsächlich eine Hardcopy dieses Fehlerobjekts erstellen, okay?

103
00:05:06,516 --> 00:05:09,760
‫Also let, und ich benutze let, und nicht const, weil

104
00:05:09,760 --> 00:05:11,700
‫wir dann natürlich später

105
00:05:11,700 --> 00:05:14,043
‫hier einen neuen Fehler neu zuweisen werden.

106
00:05:15,490 --> 00:05:18,820
‫Nennen wir diesen einen Fehler statt einfach err,

107
00:05:18,820 --> 00:05:22,250
‫was der normale Name von Fehlern in Express ist.

108
00:05:22,250 --> 00:05:24,710
‫Und so verwenden wir wieder unseren

109
00:05:24,710 --> 00:05:29,133
‫Trick, bei dem wir die Destrukturierung des ursprünglichen Fehlers verwenden, okay?

110
00:05:30,930 --> 00:05:34,257
‫Daher verwenden wir von nun an diesen Fehler anstelle von err.

111
00:05:35,620 --> 00:05:38,963
‫Also hier und hier und hier.

112
00:05:41,720 --> 00:05:42,770
‫In Ordung?

113
00:05:42,770 --> 00:05:44,890
‫Lassen Sie uns

114
00:05:44,890 --> 00:05:47,223
‫nun diese Funktion hier erstellen.

115
00:05:49,580 --> 00:05:52,883
‫Lassen Sie uns das gleich zu Beginn hier aufstellen.

116
00:05:56,247 --> 00:05:57,413
‫In Ordung.

117
00:05:58,270 --> 00:06:00,680
‫Denken Sie daran, dass dies einen

118
00:06:00,680 --> 00:06:04,210
‫Fehler erhält, und jetzt werde ich es einfach so nennen, weil

119
00:06:04,210 --> 00:06:07,320
‫dies wieder so etwas wie der Standard in Express ist.

120
00:06:07,320 --> 00:06:09,020
‫Und zu Beginn werfen

121
00:06:09,020 --> 00:06:12,910
‫wir noch einmal einen Blick auf das Fehlerobjekt hier, okay?

122
00:06:12,910 --> 00:06:17,910
‫Hier haben wir also den Weg und wir haben auch den Wert, okay?

123
00:06:18,290 --> 00:06:21,280
‫Der Pfad hier ist also im Grunde der

124
00:06:21,280 --> 00:06:25,000
‫Name des Feldes, für das die Eingabedaten das falsche Format haben, okay?

125
00:06:25,000 --> 00:06:27,860
‫Und dieser Wert hier ist dann dieser, der natürlich

126
00:06:27,860 --> 00:06:31,050
‫der ist, den wir in der Vergangenheit gemacht haben, in Ordnung?

127
00:06:31,050 --> 00:06:34,200
‫Dies kann also nicht nur für die ID passieren, sondern

128
00:06:34,200 --> 00:06:36,450
‫wirklich für jedes Feld, das wir

129
00:06:36,450 --> 00:06:39,370
‫mit einem Wert im falschen Format abfragen, in Ordnung?

130
00:06:39,370 --> 00:06:41,270
‫Lassen Sie uns nun im

131
00:06:41,270 --> 00:06:43,330
‫Grunde eine Zeichenfolge erstellen, die besagt,

132
00:06:43,330 --> 00:06:48,330
‫dass wir in diesem Fall eine ungültige ID mit dem Wert dieser ID haben, in Ordnung?

133
00:06:48,360 --> 00:06:53,360
‫Es ist also Weg und Wert, okay?

134
00:06:53,530 --> 00:06:55,873
‫Erstellen wir also hier eine Nachricht und sagen

135
00:06:59,780 --> 00:07:01,770
‫Sie Ungültiger Fehler. Pfad ist

136
00:07:08,328 --> 00:07:09,411
‫falsch. Wert.

137
00:07:13,870 --> 00:07:15,250
‫Okay?

138
00:07:15,250 --> 00:07:17,813
‫Und so geben wir jetzt einfach unseren eigenen AppError zurück.

139
00:07:18,990 --> 00:07:20,227
‫Okay?

140
00:07:20,227 --> 00:07:24,270
‫Also, wie ich schon ein paar Mal erwähnt habe, okay?

141
00:07:24,270 --> 00:07:27,740
‫Also AppError, und das muss ich eigentlich hier einbinden oder

142
00:07:27,740 --> 00:07:30,933
‫fordern, weil ich es noch nicht gemacht habe.

143
00:07:31,940 --> 00:07:35,633
‫Const AppError ist also gleich zu erfordern, und eine

144
00:07:39,150 --> 00:07:42,620
‫Ebene nach oben verschieben, dann in den Ordner

145
00:07:42,620 --> 00:07:45,213
‫Dienstprogramme und dann den appError.

146
00:07:46,350 --> 00:07:47,183
‫Hier ist es.

147
00:07:48,150 --> 00:07:52,570
‫Und so übergeben wir jetzt in oder AppError unsere Nachricht

148
00:07:52,570 --> 00:07:56,860
‫und den 400-Statuscode, der für Bad Request steht.

149
00:07:56,860 --> 00:07:59,040
‫Okay, und so verwandeln wir den

150
00:07:59,040 --> 00:08:00,940
‫seltsamen Fehler, den wir von

151
00:08:00,940 --> 00:08:02,640
‫Mongoose erhalten haben, in

152
00:08:02,640 --> 00:08:04,110
‫einen Betriebsfehler mit

153
00:08:04,110 --> 00:08:06,354
‫einer netten freundlichen Nachricht, die (kichert)

154
00:08:06,354 --> 00:08:07,187
‫ein

155
00:08:07,187 --> 00:08:09,343
‫echter Mensch lesen kann, in Ordnung?

156
00:08:10,684 --> 00:08:13,270
‫Okay, eine letzte Sache, die wir

157
00:08:13,270 --> 00:08:18,150
‫hier ändern müssen, ist, auch diese hier auf Fehler zu setzen, okay?

158
00:08:18,150 --> 00:08:21,750
‫Und wenn unser Fehler jetzt CastError ist,

159
00:08:21,750 --> 00:08:24,770
‫dann übergeben wir den Fehler an

160
00:08:24,770 --> 00:08:27,790
‫diese Funktion, die unseren AppError zurückgibt,

161
00:08:27,790 --> 00:08:31,430
‫also diesen, der dann mit unserem sendErrorProd an

162
00:08:31,430 --> 00:08:34,180
‫den Client gesendet wird. okay?

163
00:08:34,180 --> 00:08:36,123
‫Und so versuchen wir es jetzt tatsächlich.

164
00:08:37,080 --> 00:08:39,060
‫Also hier, in unserem Paket. json,

165
00:08:39,060 --> 00:08:43,627
‫wir haben dieses start:prod-Skript, und versuchen wir es also.

166
00:08:43,627 --> 00:08:48,627
‫Also, npm führt start:prod aus, und ich kann diese npm-Skriptnamen mit

167
00:08:50,250 --> 00:08:54,580
‫der Registerkarte hier im Terminal automatisch vervollständigen, okay?

168
00:08:54,580 --> 00:08:56,420
‫Und das wird im

169
00:08:56,420 --> 00:08:59,640
‫Grunde genommen einen Prozess im Produktionsmodus starten, okay?

170
00:08:59,640 --> 00:09:01,060
‫Und so versuchen wir es jetzt noch einmal.

171
00:09:01,060 --> 00:09:02,580
‫Wenn Sie diese Anfrage

172
00:09:02,580 --> 00:09:04,350
‫jetzt ausführen, sollten wir die soeben

173
00:09:04,350 --> 00:09:07,500
‫erstellte Fehlermeldung zurückbekommen, da wir gerade in der Produktion sind.

174
00:09:07,500 --> 00:09:10,060
‫Und tatsächlich, hier ist es.

175
00:09:10,060 --> 00:09:12,530
‫Wir haben also einen ungültigen und dann einen Feldnamen

176
00:09:12,530 --> 00:09:15,010
‫oder eigentlich den Pfadnamen und dann den Wert, den wir

177
00:09:15,010 --> 00:09:15,843
‫eingegeben haben.

178
00:09:17,130 --> 00:09:19,194
‫Wenn wir also etwas

179
00:09:19,194 --> 00:09:21,730
‫anderes ausprobieren, dann bekommen wir natürlich

180
00:09:21,730 --> 00:09:25,450
‫diesen und natürlich auch unseren 400 Bad Request Code.

181
00:09:25,450 --> 00:09:26,650
‫OK großartig.

182
00:09:26,650 --> 00:09:28,533
‫So, dieser wird jetzt behandelt.

183
00:09:28,533 --> 00:09:32,210
‫In der nächsten Vorlesung kümmern wir uns dann um die

184
00:09:32,210 --> 00:09:35,440
‫nächste, die für doppelte Feldnamen ist, in Ordnung?

185
00:09:35,440 --> 00:09:36,890
‫Also, bis dann in einer Sekunde.

