﻿1
00:00:01,050 --> 00:00:02,840
‫Kursleiter: Lassen Sie

2
00:00:02,840 --> 00:00:04,780
‫uns nun unser AppError-Klassengeschäft etwas

3
00:00:04,780 --> 00:00:07,400
‫mehr nutzen, indem wir ein paar 404-Fehler

4
00:00:07,400 --> 00:00:09,493
‫und einige unserer Tour-Handler-Funktionen hinzufügen.

5
00:00:10,446 --> 00:00:12,740
‫Bevor wir diese 404-Fehler

6
00:00:12,740 --> 00:00:16,030
‫tatsächlich implementieren, wollte ich jetzt nur sagen,

7
00:00:16,030 --> 00:00:19,640
‫dass wir die catchAsync-Funktion natürlich auch in unserem

8
00:00:19,640 --> 00:00:22,290
‫Router hätten verwenden können, okay?

9
00:00:22,290 --> 00:00:24,940
‫Lassen Sie mich Ihnen also zeigen, wie das funktionieren würde.

10
00:00:24,940 --> 00:00:27,090
‫Hier in TourRoutes

11
00:00:27,090 --> 00:00:29,730
‫hätte ich diese Funktion also

12
00:00:30,750 --> 00:00:34,530
‫einfach so in catchAsync einpacken können, anstatt

13
00:00:34,530 --> 00:00:38,480
‫es direkt hier im Controller zu tun.

14
00:00:38,480 --> 00:00:41,400
‫Also, hier, wo ich es tatsächlich getan habe, oder?

15
00:00:41,400 --> 00:00:44,200
‫Und das hätte genau das gleiche Ergebnis

16
00:00:44,200 --> 00:00:45,950
‫gehabt, aber ich

17
00:00:45,950 --> 00:00:48,190
‫habe es nicht so gemacht, weil

18
00:00:48,190 --> 00:00:50,110
‫ich mir so merken muss,

19
00:00:50,110 --> 00:00:52,350
‫welche dieser Methoden hier eigentlich

20
00:00:52,350 --> 00:00:54,800
‫eine Sync-Methode ist, okay, also nur

21
00:00:54,800 --> 00:00:58,960
‫bei denen füge ich tatsächlich die catchAsync-Funktion hinzu , rechts?

22
00:00:58,960 --> 00:01:02,150
‫Nun, in diesem Fall sind eigentlich alle asynchrone Funktionen und

23
00:01:02,150 --> 00:01:05,700
‫daher ist das hier in diesem Beispiel nicht wirklich der Fall,

24
00:01:05,700 --> 00:01:07,530
‫aber es werden später einige

25
00:01:07,530 --> 00:01:11,150
‫Beispiele geben, bei denen nicht alle Handler asynchrone Funktionen sind, und

26
00:01:11,150 --> 00:01:12,170
‫in diesem

27
00:01:12,170 --> 00:01:14,020
‫Fall hätte ich wirklich um mich

28
00:01:14,020 --> 00:01:17,100
‫daran zu erinnern, welche von ihnen ich in catchAsync

29
00:01:17,100 --> 00:01:18,600
‫einpacken muss und welche

30
00:01:18,600 --> 00:01:20,450
‫nicht, und so ist es

31
00:01:20,450 --> 00:01:23,930
‫viel einfacher, dies im Controller zu tun, weil einfach jedes

32
00:01:23,930 --> 00:01:25,520
‫Mal, wenn ich hier

33
00:01:25,520 --> 00:01:27,190
‫eine async-Funktion schreibe, sie bereits

34
00:01:27,190 --> 00:01:30,220
‫wissen, dass ich sie einpacken muss es in catchAsync.

35
00:01:30,220 --> 00:01:31,350
‫Okay.

36
00:01:31,350 --> 00:01:32,880
‫Also, ich mache es nicht hier,

37
00:01:32,880 --> 00:01:36,400
‫ich mache es einfach so, wie ich es euch im letzten Video gezeigt habe.

38
00:01:36,400 --> 00:01:39,680
‫Okay und tatsächlich bin ich einmal auf einen Fehler gestoßen,

39
00:01:39,680 --> 00:01:41,330
‫der wirklich schwer zu

40
00:01:41,330 --> 00:01:43,160
‫finden war, weil ich tatsächlich

41
00:01:43,160 --> 00:01:45,690
‫eine Funktion, die nicht asynchron war, in catchAsync

42
00:01:45,690 --> 00:01:47,850
‫verpackt habe und damit wirklich nicht

43
00:01:47,850 --> 00:01:50,350
‫funktionierte und ich nicht herausfinden konnte, wo der

44
00:01:50,350 --> 00:01:52,830
‫Fehler lag und viel verschwendet habe Zeit dazu.

45
00:01:52,830 --> 00:01:56,820
‫Und so platziere ich catchAsync seither nicht mehr hier, sondern

46
00:01:56,820 --> 00:01:59,610
‫ganz nah dort, wo ich es

47
00:01:59,610 --> 00:02:02,860
‫tatsächlich brauche, so nah am eigentlich asynchronen Code.

48
00:02:02,860 --> 00:02:04,640
‫Okay, und nachdem das

49
00:02:04,640 --> 00:02:07,820
‫gesagt wurde, implementieren wir jetzt einige 404-Fehler hier.

50
00:02:07,820 --> 00:02:09,680
‫In Ordnung, also möchte ich

51
00:02:09,680 --> 00:02:11,680
‫Ihnen zunächst noch einmal das Beispiel zeigen,

52
00:02:11,680 --> 00:02:13,830
‫das wir im letzten Video gemacht haben.

53
00:02:13,830 --> 00:02:16,350
‫Okay, wir haben also versucht, eine Tour

54
00:02:16,350 --> 00:02:19,780
‫für diese seltsame ID zu erstellen, die nicht wirklich

55
00:02:19,780 --> 00:02:20,989
‫existiert, und

56
00:02:20,989 --> 00:02:23,690
‫der Fehler, den wir erhalten haben, ist,

57
00:02:23,690 --> 00:02:26,410
‫dass Mongoose diese Zeichenfolge hier im Grunde

58
00:02:26,410 --> 00:02:29,630
‫nicht in eine gültige ID für MongoDB umwandeln konnte.

59
00:02:29,630 --> 00:02:33,653
‫Aber was passiert, wenn wir tatsächlich eine gültige MongoDB-ID verwenden?

60
00:02:34,750 --> 00:02:38,003
‫Also, lass uns zum Beispiel, ja, lass uns diese hier

61
00:02:38,003 --> 00:02:39,173
‫kopieren, okay,

62
00:02:41,660 --> 00:02:44,670
‫und diese wird natürlich ein Ergebnis haben und also

63
00:02:44,670 --> 00:02:47,770
‫lass es uns nur leicht ändern, also zum Beispiel,

64
00:02:47,770 --> 00:02:50,060
‫dies hier auf Null zu ändern, ist

65
00:02:50,060 --> 00:02:52,340
‫immer noch eine gültige ID , also

66
00:02:52,340 --> 00:02:53,900
‫sieht es so aus und

67
00:02:53,900 --> 00:02:56,000
‫es sieht genauso aus wie vorher,

68
00:02:56,000 --> 00:02:57,440
‫ich habe nur eine

69
00:02:57,440 --> 00:03:00,830
‫Nummer geändert, aber diese ID wird es wahrscheinlich nicht geben.

70
00:03:00,830 --> 00:03:03,470
‫Also, mal sehen, was wir dann bekommen.

71
00:03:03,470 --> 00:03:06,810
‫Und tatsächlich ist unser Ergebnis hier null.

72
00:03:06,810 --> 00:03:10,340
‫In Ordnung, und das ist nicht wirklich das, was wir wollen, oder?

73
00:03:10,340 --> 00:03:14,550
‫Wir wollen hier einen 404-Statuscode anzeigen und sagen, dass

74
00:03:14,550 --> 00:03:17,310
‫diese Tour nicht gefunden wurde.

75
00:03:17,310 --> 00:03:20,750
‫Okay und so verwenden wir jetzt die orAppError-Klasse,

76
00:03:20,750 --> 00:03:22,580
‫um das zu implementieren.

77
00:03:22,580 --> 00:03:24,040
‫Denken Sie nur daran, dass

78
00:03:24,040 --> 00:03:26,880
‫die Tour, die wir hier zurück bekommen, null ist, okay?

79
00:03:26,880 --> 00:03:29,453
‫Also null, auf das wir jetzt testen können.

80
00:03:30,920 --> 00:03:33,533
‫Wenn wir also zu unserem getTour-Handler gehen,

81
00:03:35,260 --> 00:03:40,260
‫implementieren wir jetzt, wenn keine Tour vorhanden ist, und in diesem Fall erstellen wir

82
00:03:41,030 --> 00:03:43,390
‫einen Fehler, und dies funktioniert hier, denn

83
00:03:44,410 --> 00:03:45,243
‫wenn

84
00:03:45,243 --> 00:03:46,650
‫keine Tour vorhanden ist,

85
00:03:46,650 --> 00:03:47,710
‫ist sie null.

86
00:03:47,710 --> 00:03:51,610
‫Denken Sie daran, dass null in JavaScript ein falscher Wert ist,

87
00:03:51,610 --> 00:03:54,660
‫also ein Wert, der hier in einer if-Anweisung

88
00:03:54,660 --> 00:03:56,250
‫in false umgewandelt wird.

89
00:03:56,250 --> 00:03:58,060
‫Okay, und wenn es keine Tour

90
00:03:58,060 --> 00:03:59,450
‫gibt, dann ist

91
00:03:59,450 --> 00:04:01,790
‫Tour falsch und dann ist nicht falsch

92
00:04:01,790 --> 00:04:04,830
‫natürlich wahr und so geben wir dann diesen if-Block ein.

93
00:04:04,830 --> 00:04:07,600
‫Was wollen wir also tun, wenn keine Tour stattfindet?

94
00:04:07,600 --> 00:04:11,530
‫Nun, wir wollen als nächstes einen Fehler erstellen.

95
00:04:11,530 --> 00:04:14,861
‫Also, um direkt in eine fehlerhafte und verknüpfte Middleware

96
00:04:14,861 --> 00:04:15,990
‫zu springen.

97
00:04:15,990 --> 00:04:18,870
‫Also, wir machen einen neuen AppError, der noch

98
00:04:20,610 --> 00:04:23,350
‫nicht verfügbar ist, wir müssen ihn noch

99
00:04:23,350 --> 00:04:26,120
‫importieren, aber lasst uns ihn hier sofort verwenden.

100
00:04:26,120 --> 00:04:27,950
‫Okay, und dann

101
00:04:30,500 --> 00:04:34,673
‫sagen wir einfach Keine Tour mit dieser ID gefunden.

102
00:04:35,580 --> 00:04:37,070
‫Und dann ein Statuscode.

103
00:04:37,070 --> 00:04:40,940
‫Denken Sie daran, dass das zweite Argument 404 ist, in Ordnung?

104
00:04:40,940 --> 00:04:43,460
‫Jetzt noch eine letzte Sache, die

105
00:04:43,460 --> 00:04:46,470
‫wir hier tun müssen, nämlich return, okay, weil

106
00:04:46,470 --> 00:04:49,410
‫wir diese Funktion sofort zurückgeben und nicht

107
00:04:49,410 --> 00:04:52,250
‫zur nächsten Zeile übergehen möchten, die diese

108
00:04:52,250 --> 00:04:53,690
‫wäre und

109
00:04:53,690 --> 00:04:57,800
‫dann im Grunde versuchen würde, zwei Antworten zu senden, und wir

110
00:04:57,800 --> 00:05:00,210
‫Ich hoffe, dass Sie sich daran

111
00:05:00,210 --> 00:05:02,020
‫erinnern werden, und das

112
00:05:02,020 --> 00:05:05,580
‫ist der Grund, warum wir immer hierher zurückkehren müssen.

113
00:05:05,580 --> 00:05:09,610
‫Okay, lassen Sie uns jetzt fortfahren und schnell den appError importieren und

114
00:05:10,870 --> 00:05:13,200
‫der ist ähnlich wie hier, also lassen

115
00:05:13,200 --> 00:05:14,823
‫Sie uns einfach duplizieren.

116
00:05:17,990 --> 00:05:21,203
‫Okay, und hier ist es tatsächlich mit einem großen A.

117
00:05:22,170 --> 00:05:24,210
‫Alles klar, speichern wir es und

118
00:05:24,210 --> 00:05:25,850
‫versuchen wir es jetzt

119
00:05:27,160 --> 00:05:31,450
‫noch einmal und jetzt wurde tatsächlich keine Tour mit dieser ID 404 gefunden.

120
00:05:31,450 --> 00:05:34,440
‫Perfekt, also genau das, was wir wollten.

121
00:05:34,440 --> 00:05:37,170
‫Ach und du hast auch gesehen, dass wir hier versagt haben.

122
00:05:37,170 --> 00:05:40,980
‫Okay und das kommt auch von oder Klasse.

123
00:05:40,980 --> 00:05:44,270
‫Super, das funktioniert und ich hoffe sehr,

124
00:05:44,270 --> 00:05:48,060
‫dass Sie jetzt genau verstanden haben, wie diese

125
00:05:48,060 --> 00:05:50,370
‫ganze Fehlerbehandlung jetzt funktioniert.

126
00:05:50,370 --> 00:05:53,300
‫Okay, also erstellen wir wieder einen Fehler und übergeben

127
00:05:53,300 --> 00:05:55,450
‫diesen Fehler dann an next und

128
00:05:55,450 --> 00:05:57,820
‫sobald next etwas empfängt, geht es davon

129
00:05:57,820 --> 00:05:59,880
‫aus, dass es sich um

130
00:05:59,880 --> 00:06:00,757
‫einen Fehler

131
00:06:00,757 --> 00:06:03,630
‫handelt und springt direkt in die globale Fehlerbehandlungs-Middleware,

132
00:06:03,630 --> 00:06:06,683
‫die dann die Antwort für uns sendet , okay?

133
00:06:08,210 --> 00:06:09,850
‫Also kopieren wir

134
00:06:09,850 --> 00:06:12,410
‫diesen und fügen ihn in alle anderen

135
00:06:12,410 --> 00:06:15,600
‫Handler ein, die Dokumente basierend auf der ID abfragen.

136
00:06:15,600 --> 00:06:20,470
‫Also keine Tour erstellen, sondern eine Tour aktualisieren, okay?

137
00:06:20,470 --> 00:06:21,380
‫Und hier

138
00:06:21,380 --> 00:06:23,120
‫das gleiche, wenn wir versuchen, die

139
00:06:23,120 --> 00:06:24,360
‫Tour zu aktualisieren, die

140
00:06:24,360 --> 00:06:26,773
‫nicht existiert, erhalten wir genau den gleichen Fehler.

141
00:06:29,210 --> 00:06:32,470
‫Zum Schluss natürlich das gleiche mit delete.

142
00:06:32,470 --> 00:06:35,870
‫Und jetzt sehen Sie, dass ESLint mir diesen Fehler hier und

143
00:06:35,870 --> 00:06:38,710
‫so gegeben hat, weil diese Tour nicht definiert ist

144
00:06:38,710 --> 00:06:41,730
‫und in diesem Fall ESLint mich wirklich davor bewahrt

145
00:06:41,730 --> 00:06:43,660
‫hat, diesen Fehler zu verursachen.

146
00:06:43,660 --> 00:06:44,550
‫Rechts?

147
00:06:44,550 --> 00:06:46,790
‫Also, wieder ohne ESLint, hätte ich

148
00:06:46,790 --> 00:06:48,570
‫es wahrscheinlich einfach hier

149
00:06:48,570 --> 00:06:49,920
‫eingefügt und

150
00:06:49,920 --> 00:06:53,050
‫es beendet, ohne zu bemerken, dass Tour nirgendwo

151
00:06:53,050 --> 00:06:54,600
‫in dieser Funktion definiert

152
00:06:54,600 --> 00:06:57,830
‫ist, aber da wir dieses wirklich wertvolle Tool installiert

153
00:06:57,830 --> 00:06:59,970
‫haben, kann ich es jetzt reparieren.

154
00:06:59,970 --> 00:07:01,820
‫Also gut, bis

155
00:07:01,820 --> 00:07:06,490
‫hierhin haben wir diese Löschanweisung hier einfach abgewartet und das Ergebnis nicht

156
00:07:06,490 --> 00:07:08,460
‫gespeichert und das liegt einfach

157
00:07:08,460 --> 00:07:10,710
‫daran, dass wir sie nicht brauchten.

158
00:07:10,710 --> 00:07:13,200
‫Okay, aber im Moment brauchen wir es tatsächlich,

159
00:07:13,200 --> 00:07:15,140
‫weil wir diese Tour-Variable haben wollen,

160
00:07:15,140 --> 00:07:18,413
‫um zu überprüfen, ob es tatsächlich eine Tour gibt oder nicht.

161
00:07:21,460 --> 00:07:23,760
‫Also ganz einfach, const tour und dann

162
00:07:23,760 --> 00:07:25,350
‫gleich das Ergebnis, speichern

163
00:07:25,350 --> 00:07:27,450
‫und dann ist der Fehler weg.

164
00:07:28,610 --> 00:07:29,820
‫So großartig.

165
00:07:29,820 --> 00:07:32,770
‫ESLint bei der Arbeit, in Ordnung?

166
00:07:32,770 --> 00:07:37,770
‫Jetzt haben Sie vielleicht bemerkt, dass ich diesen 404-Fehler hier in diesem

167
00:07:37,950 --> 00:07:40,000
‫getAllTour-Handler nicht hinzugefügt habe.

168
00:07:40,000 --> 00:07:41,910
‫Also, warum habe ich das getan?

169
00:07:41,910 --> 00:07:43,620
‫Lassen Sie mich Ihnen erklären, warum.

170
00:07:43,620 --> 00:07:46,330
‫Wenn also beispielsweise keine Ergebnisse gefunden wurden,

171
00:07:46,330 --> 00:07:50,530
‫keine Ergebnisse für einen Filter vorhanden sind oder weil die

172
00:07:50,530 --> 00:07:52,520
‫angeforderte Seite nicht

173
00:07:52,520 --> 00:07:55,970
‫existiert, können wir natürlich einen 404-Fehler senden und

174
00:07:55,970 --> 00:07:58,550
‫sagen, dass die Daten nicht vorhanden

175
00:07:58,550 --> 00:08:01,220
‫sind fand aber meiner Meinung nach

176
00:08:01,220 --> 00:08:03,760
‫und auch der Meinung anderer Entwickler,

177
00:08:03,760 --> 00:08:07,170
‫dass diese Anfrage nicht ganz richtig ist, da

178
00:08:07,170 --> 00:08:09,240
‫nicht wirklich ein Fehler vorlag.

179
00:08:09,240 --> 00:08:11,950
‫Ich meine, die Anfrage wurde korrekt empfangen.

180
00:08:11,950 --> 00:08:14,550
‫Die Datenbank hat korrekt nach den Touren

181
00:08:14,550 --> 00:08:16,950
‫gesucht und genau null Datensätze gefunden.

182
00:08:16,950 --> 00:08:19,150
‫Daher werden diese null

183
00:08:19,150 --> 00:08:23,250
‫Datensätze genau das, was wir zusammen mit dem 200 HTTP-Code zurücksenden.

184
00:08:23,250 --> 00:08:25,120
‫Also gut, ich bin wieder der

185
00:08:25,120 --> 00:08:27,300
‫Meinung, dass es nicht wirklich einen Fehler

186
00:08:27,300 --> 00:08:29,610
‫geben kann, wenn ein Benutzer alle Touren anfordert,

187
00:08:29,610 --> 00:08:32,680
‫es sei denn, es liegt ein Fehler in der Datenbank

188
00:08:32,680 --> 00:08:33,850
‫oder ähnliches vor.

189
00:08:33,850 --> 00:08:35,210
‫Aber in diesem

190
00:08:35,210 --> 00:08:37,600
‫Fall wird Mongoose dann automatisch einen Fehler ausgeben.

191
00:08:37,600 --> 00:08:40,950
‫Richtig, was dann wiederum von unserer oder

192
00:08:40,950 --> 00:08:42,920
‫catchAsync-Funktion abgefangen und, wie

193
00:08:42,920 --> 00:08:44,330
‫Sie bereits wissen,

194
00:08:44,330 --> 00:08:47,510
‫in unserem globalen Fehlerhandler und wie Sie

195
00:08:47,510 --> 00:08:48,800
‫bereits

196
00:08:48,800 --> 00:08:52,000
‫wissen, in unserer globalen Fehlerbehandlungs-Middleware behandelt werden.

197
00:08:52,000 --> 00:08:55,640
‫In Ordnung, ich habe diese Worte jetzt schon so oft gesagt.

198
00:08:55,640 --> 00:08:57,717
‫Wie auch immer, ich hoffe,

199
00:08:57,717 --> 00:09:01,113
‫das machte Sinn und so, ja, lass uns jetzt weitermachen.

