﻿1
00:00:00,890 --> 00:00:02,400
‫Dozent: Hallo.

2
00:00:02,400 --> 00:00:06,663
‫Lassen Sie uns nun einige nette Fehlerseiten für unsere Benutzer rendern.

3
00:00:08,210 --> 00:00:11,723
‫Lassen Sie uns also zunächst einen Fehler erstellen.

4
00:00:13,100 --> 00:00:15,033
‫Lassen Sie uns diese Tour hier eröffnen.

5
00:00:16,350 --> 00:00:18,293
‫Nein, ich möchte nicht übersetzen.

6
00:00:19,440 --> 00:00:23,640
‫Und jetzt fügen wir diesem Log hier einfach etwas hinzu, und

7
00:00:23,640 --> 00:00:26,563
‫das wird dann natürlich nicht gefunden.

8
00:00:27,800 --> 00:00:31,140
‫Richtig, und so sieht ein Fehler an dieser

9
00:00:31,140 --> 00:00:32,330
‫Stelle aus.

10
00:00:32,330 --> 00:00:34,510
‫Also einfach all dieses JSON

11
00:00:34,510 --> 00:00:37,440
‫hier, so wie es in Postman aussehen würde.

12
00:00:37,440 --> 00:00:40,110
‫Wir haben diese Art von Fehler hier schon einmal gesehen.

13
00:00:40,110 --> 00:00:42,740
‫Also, lassen Sie uns das jetzt beheben.

14
00:00:42,740 --> 00:00:46,230
‫Aber zuerst müssen wir diesen speziellen Fehler tatsächlich beheben.

15
00:00:46,230 --> 00:00:48,150
‫Im Moment erhalten

16
00:00:48,150 --> 00:00:53,150
‫wir also den Eigenschaftsnamen null in getTour nicht lesen können.

17
00:00:53,530 --> 00:00:54,600
‫Okay.

18
00:00:54,600 --> 00:00:59,530
‫Und das ist hier in unserem Views-Controller getTour.

19
00:00:59,530 --> 00:01:02,120
‫Und hier drin haben wir also keine

20
00:01:02,120 --> 00:01:05,260
‫Fehlerbehandlung für den Fall, dass es keine Tour gibt, oder?

21
00:01:05,260 --> 00:01:08,060
‫Das haben wir also in all unseren anderen Routenhandlern, aber

22
00:01:08,060 --> 00:01:10,470
‫in diesem haben wir es noch nicht.

23
00:01:10,470 --> 00:01:11,513
‫Also fügen wir das hinzu.

24
00:01:12,570 --> 00:01:17,570
‫Wenn es also keine Tour gibt, kehren Sie zurück und

25
00:01:18,910 --> 00:01:23,910
‫gehen Sie mit einem neuen App-Fehler zur nächsten Middleware.

26
00:01:25,020 --> 00:01:28,090
‫Und wahrscheinlich ist das noch nicht da.

27
00:01:28,090 --> 00:01:29,483
‫Und nein, das ist es nicht.

28
00:01:31,290 --> 00:01:32,123
‫Also konst.

29
00:01:34,904 --> 00:01:36,363
‫AppError gleich.

30
00:01:44,880 --> 00:01:46,220
‫In Ordung.

31
00:01:46,220 --> 00:01:48,280
‫Fehler hier natürlich.

32
00:01:48,280 --> 00:01:49,480
‫Und dann sagen wir,

33
00:01:53,720 --> 00:01:55,633
‫es gibt keine Tour mit diesem Namen.

34
00:01:57,420 --> 00:02:01,090
‫Und dann ist es ein 404 für nicht gefunden.

35
00:02:01,090 --> 00:02:02,400
‫Okay?

36
00:02:02,400 --> 00:02:04,300
‫Versuchen wir es also noch einmal.

37
00:02:04,300 --> 00:02:07,690
‫Und so sollten wir jetzt einen viel schöneren Fehler bekommen.

38
00:02:07,690 --> 00:02:09,490
‫Und tatsächlich bekommen wir einen.

39
00:02:09,490 --> 00:02:11,135
‫Also 404.

40
00:02:11,135 --> 00:02:14,800
‫Und denken Sie daran, dass es sich jetzt um einen Betriebsfehler handelt.

41
00:02:14,800 --> 00:02:18,570
‫Also ein Fehler, von dem wir wissen, dass wir uns im Grunde genommen selbst erstellt haben.

42
00:02:18,570 --> 00:02:21,910
‫Und das wird nach wie vor für

43
00:02:21,910 --> 00:02:23,870
‫unsere Fehlerbehandlungsstrategie wichtig sein.

44
00:02:23,870 --> 00:02:27,240
‫Reden wir also tatsächlich darüber.

45
00:02:27,240 --> 00:02:30,010
‫Und hier sind wir fertig.

46
00:02:30,010 --> 00:02:32,283
‫Und jetzt haben wir in

47
00:02:33,500 --> 00:02:37,130
‫unserem Fehlercontroller zwei Funktionen, die Fehler an

48
00:02:37,130 --> 00:02:39,070
‫den Client zurücksenden.

49
00:02:39,070 --> 00:02:41,280
‫Also haben wir dieses hier für die

50
00:02:41,280 --> 00:02:43,370
‫Entwicklung und dieses für die Produktion.

51
00:02:43,370 --> 00:02:45,650
‫In der Produktion unterscheiden

52
00:02:45,650 --> 00:02:49,730
‫wir dann zwischen Bedienungsfehlern und anderen unbekannten Fehlern.

53
00:02:49,730 --> 00:02:50,563
‫Rechts?

54
00:02:50,563 --> 00:02:53,190
‫Und das ist es, worüber wir gerade vorher gesprochen haben.

55
00:02:53,190 --> 00:02:54,690
‫Bei den uns bekannten Fehlern

56
00:02:54,690 --> 00:02:57,470
‫senden wir die eigentliche Fehlermeldung zurück, weil wir sicher

57
00:02:57,470 --> 00:02:59,780
‫sein können, dass es sich nicht um

58
00:02:59,780 --> 00:03:01,130
‫einen seltsam aussehenden

59
00:03:01,130 --> 00:03:03,520
‫Fehler handelt, der irgendwo von Express oder

60
00:03:03,520 --> 00:03:04,910
‫Note oder ähnlichem kommt.

61
00:03:04,910 --> 00:03:08,180
‫Auf der anderen Seite, wenn es sich um einen unbekannten

62
00:03:08,180 --> 00:03:11,410
‫Fehler handelt, wollen wir die Fehlerdetails nicht preisgeben.

63
00:03:11,410 --> 00:03:13,880
‫Und nun werden wir in diesem Fall

64
00:03:13,880 --> 00:03:16,433
‫mit der gerenderten Website tatsächlich dieselbe Strategie verwenden.

65
00:03:17,460 --> 00:03:18,950
‫Jetzt füge

66
00:03:18,950 --> 00:03:21,960
‫ich einfach jeder dieser Funktionen das

67
00:03:21,960 --> 00:03:23,900
‫Rendering einer Fehlerseite hinzu.

68
00:03:23,900 --> 00:03:26,450
‫Und im Grunde werde ich

69
00:03:26,450 --> 00:03:29,750
‫testen, ob die URL mit Slash-API beginnt.

70
00:03:29,750 --> 00:03:33,930
‫Und in diesem Fall senden wir diese Art von Fehler, richtig.

71
00:03:33,930 --> 00:03:38,500
‫Aber wenn die URL nicht mit API beginnt, bedeutet dies,

72
00:03:38,500 --> 00:03:41,340
‫dass wir eine Fehlerseite als gerenderte

73
00:03:41,340 --> 00:03:44,030
‫Website rendern möchten, okay?

74
00:03:44,030 --> 00:03:46,823
‫Also genau wie wir es in diesem Abschnitt getan haben.

75
00:03:47,920 --> 00:03:50,520
‫Wie auch immer, lassen Sie uns das jetzt implementieren.

76
00:03:50,520 --> 00:03:55,520
‫Und so können wir die ursprüngliche URL des Anfragepunkts verwenden.

77
00:03:55,570 --> 00:03:58,133
‫Und wahrscheinlich haben wir das schon einmal benutzt.

78
00:04:00,000 --> 00:04:00,840
‫In Ordung?

79
00:04:00,840 --> 00:04:04,690
‫Original-URL ist also im Grunde die gesamte URL, aber nicht

80
00:04:04,690 --> 00:04:06,180
‫mit dem Host.

81
00:04:06,180 --> 00:04:08,990
‫So sieht es dann genau so aus wie die Route.

82
00:04:08,990 --> 00:04:12,050
‫Und so wieder, wenn wir unsere

83
00:04:12,050 --> 00:04:15,640
‫URL erreichen, dann beginnt diese Route mit der Slash-API.

84
00:04:15,640 --> 00:04:17,440
‫Und jetzt können wir das testen.

85
00:04:17,440 --> 00:04:20,710
‫Wir können also eine JavaScript-Funktion namens startsWith verwenden.

86
00:04:24,310 --> 00:04:26,873
‫Also eine Funktion, die für Strings verfügbar ist.

87
00:04:27,860 --> 00:04:30,973
‫Und dann testen Sie, ob es mit der Slash-API beginnt.

88
00:04:32,530 --> 00:04:33,363
‫Rechts?

89
00:04:33,363 --> 00:04:36,853
‫Und wenn ja, dann wollen wir dies tun.

90
00:04:38,630 --> 00:04:41,163
‫Senden Sie den Fehler also einfach als JSON herunter.

91
00:04:42,570 --> 00:04:46,943
‫Aber wenn nicht, dann wollen wir eigentlich einen Fehler rendern.

92
00:04:49,320 --> 00:04:52,103
‫Es ist also immer noch res. Status.

93
00:04:54,530 --> 00:04:56,177
‫Und auch zu statusCode.

94
00:04:56,177 --> 00:04:59,483
‫Aber hier drin ist es eigentlich rendern.

95
00:05:00,430 --> 00:05:02,480
‫Dann erhalten wir den Namen der Vorlage,

96
00:05:02,480 --> 00:05:05,290
‫und wir werden diese Vorlage in einer Sekunde erstellen, aber

97
00:05:05,290 --> 00:05:07,263
‫sie wird als Fehler bezeichnet.

98
00:05:08,230 --> 00:05:10,810
‫Und dann sind die Daten, die wir dorthin

99
00:05:10,810 --> 00:05:12,970
‫schicken wollen, vorerst nur der Titel.

100
00:05:12,970 --> 00:05:14,430
‫Und ich werde noch einiges

101
00:05:14,430 --> 00:05:16,223
‫hinzufügen, wenn die Vorlage tatsächlich fertig ist.

102
00:05:18,350 --> 00:05:22,900
‫Also, etwas ist schief gelaufen, wird der Titel

103
00:05:22,900 --> 00:05:25,323
‫dieser Fehlerseite sein.

104
00:05:26,490 --> 00:05:27,750
‫In Ordung?

105
00:05:27,750 --> 00:05:29,570
‫Oh, eigentlich haben wir

106
00:05:29,570 --> 00:05:31,630
‫hier keinen Zugriff auf die Request-Variable.

107
00:05:31,630 --> 00:05:33,480
‫Und seine Funktion.

108
00:05:33,480 --> 00:05:35,173
‫Und so fügen wir das hinzu.

109
00:05:36,790 --> 00:05:38,160
‫Anfrage hier.

110
00:05:38,160 --> 00:05:40,270
‫Und auch hier werden wir es brauchen.

111
00:05:40,270 --> 00:05:41,103
‫Dieses.

112
00:05:42,790 --> 00:05:45,010
‫Und das fügen wir auch hier hinzu.

113
00:05:45,010 --> 00:05:47,193
‫Also gleich hier.

114
00:05:53,723 --> 00:05:54,853
‫Okay.

115
00:05:55,690 --> 00:05:59,180
‫Jetzt müssen wir also tatsächlich diese Seite oder

116
00:05:59,180 --> 00:06:01,400
‫diese Vorlage namens error erstellen.

117
00:06:01,400 --> 00:06:04,683
‫Und dafür habe ich auch schon wieder eine einfache Vorlage.

118
00:06:06,110 --> 00:06:11,030
‫Es befindet sich also in dev-data, templates und errorTemplate.

119
00:06:12,830 --> 00:06:14,110
‫Okay?

120
00:06:14,110 --> 00:06:15,513
‫Also kopieren wir das.

121
00:06:17,370 --> 00:06:19,493
‫Und dann erstellen Sie eine Ansicht dafür.

122
00:06:21,190 --> 00:06:22,253
‫Error. Mops.

123
00:06:24,010 --> 00:06:24,843
‫Okay.

124
00:06:24,843 --> 00:06:28,080
‫Hier haben wir also ein einfaches h2, das sagt, uh

125
00:06:28,080 --> 00:06:29,800
‫oh, etwas ist schief gelaufen.

126
00:06:29,800 --> 00:06:32,540
‫Dann (lacht) ein paar lustige Emojis.

127
00:06:32,540 --> 00:06:34,100
‫Sie machen nicht wirklich Spaß.

128
00:06:34,100 --> 00:06:38,400
‫Und dann wollen wir hier auch noch eine Nachricht weitergeben können.

129
00:06:38,400 --> 00:06:39,750
‫In Ordung?

130
00:06:39,750 --> 00:06:44,750
‫Fügen wir dies also gleich zu msg hinzu, nur eine Abkürzung für Nachricht.

131
00:06:46,320 --> 00:06:47,530
‫In Ordung?

132
00:06:47,530 --> 00:06:48,963
‫Und das ist es tatsächlich.

133
00:06:49,940 --> 00:06:54,940
‫Schließen wir das und geben wir diese Nachricht weiter.

134
00:06:55,810 --> 00:06:58,640
‫Damit ist dann msg gesetzt.

135
00:06:58,640 --> 00:07:02,403
‫Und lass es uns wirklich auf Fehlerpunktnachricht einstellen.

136
00:07:03,700 --> 00:07:04,533
‫Okay?

137
00:07:04,533 --> 00:07:07,260
‫Und das machen wir hier, weil wir uns in der Entwicklung befinden.

138
00:07:07,260 --> 00:07:08,423
‫Behalte das also im Hinterkopf.

139
00:07:09,760 --> 00:07:11,460
‫Lassen Sie uns hier auch einige Kommentare hinzufügen.

140
00:07:13,402 --> 00:07:14,235
‫API.

141
00:07:18,360 --> 00:07:19,593
‫Stellen wir das hier.

142
00:07:24,740 --> 00:07:26,570
‫Die gerenderte Website.

143
00:07:26,570 --> 00:07:29,890
‫Also machen wir es wieder so, mit Fehlermeldung,

144
00:07:29,890 --> 00:07:31,530
‫denn in der

145
00:07:31,530 --> 00:07:34,970
‫Entwicklung spielt es keine Rolle, ob wir alle Fehlerdetails

146
00:07:34,970 --> 00:07:36,660
‫an unsere Seite weitergeben, oder?

147
00:07:36,660 --> 00:07:39,920
‫Denn niemand wird es wirklich sehen, denn ja, wir sind

148
00:07:39,920 --> 00:07:41,310
‫in der Entwicklung.

149
00:07:41,310 --> 00:07:44,323
‫Das sollte also jetzt funktionieren.

150
00:07:45,330 --> 00:07:48,793
‫Alles, was wir jetzt tun müssen, ist diese Seite neu zu laden.

151
00:07:51,950 --> 00:07:54,030
‫Aber jetzt stimmt hier etwas nicht.

152
00:07:54,030 --> 00:07:57,470
‫Es heißt also, es wurden keine Daten gesendet.

153
00:07:57,470 --> 00:07:58,633
‫Gehen wir also hierher zurück.

154
00:07:59,470 --> 00:08:01,713
‫Naja als erstes Problem sehe ich

155
00:08:02,650 --> 00:08:06,620
‫hier, dass ich den Statuscode haben soll und nicht nur den Status.

156
00:08:06,620 --> 00:08:08,870
‫Das ist alles, um zu überprüfen, ob wir hier einen Fehler haben.

157
00:08:08,870 --> 00:08:09,910
‫Oh ja.

158
00:08:09,910 --> 00:08:11,413
‫Tatsächlich gibt es Fehler.

159
00:08:12,770 --> 00:08:16,203
‫Es war also tatsächlich der ungültige Statuscode.

160
00:08:17,770 --> 00:08:19,113
‫Hier sollte es also Code sein.

161
00:08:20,170 --> 00:08:21,723
‫Lassen Sie uns das noch einmal speichern.

162
00:08:23,170 --> 00:08:24,590
‫Erneut laden.

163
00:08:24,590 --> 00:08:28,000
‫Und jetzt bekommen wir hier eine Fehlerseite.

164
00:08:28,000 --> 00:08:29,830
‫Nun, es ist nicht wirklich formatiert.

165
00:08:29,830 --> 00:08:32,830
‫Aber trotzdem hat es den Titel und, was noch

166
00:08:32,830 --> 00:08:36,180
‫wichtiger ist, es hat diese Botschaft, die wir gerade weitergegeben haben.

167
00:08:36,180 --> 00:08:38,600
‫Es gibt also keine Tour mit diesem Namen.

168
00:08:38,600 --> 00:08:43,600
‫Und das kommt genau von unserem Views Controller.

169
00:08:43,760 --> 00:08:45,340
‫Also gleich von hier.

170
00:08:45,340 --> 00:08:48,720
‫Denken Sie also an die Logik, bei der wir hier einen Fehler

171
00:08:48,720 --> 00:08:50,920
‫erstellen, der dann an unsere globale Fehler-

172
00:08:50,920 --> 00:08:52,393
‫und Lint-Middleware weitergegeben wird.

173
00:08:53,340 --> 00:08:54,173
‫Rechts?

174
00:08:54,173 --> 00:08:56,760
‫Und das ist derjenige, der diese

175
00:08:56,760 --> 00:08:59,700
‫Fehler aufnimmt und an den Client sendet.

176
00:08:59,700 --> 00:09:02,300
‫In unserem Fall erhalten wir jetzt

177
00:09:02,300 --> 00:09:05,760
‫diesen Fehler, weil wir hier in unserer Vorlage

178
00:09:05,760 --> 00:09:07,770
‫noch etwas vergessen haben.

179
00:09:07,770 --> 00:09:11,660
‫Was natürlich nur dazu dient, unser Haupttemplate zu erweitern.

180
00:09:11,660 --> 00:09:12,810
‫Rechts?

181
00:09:12,810 --> 00:09:17,810
‫Wir müssen also sagen, bis zur Basisvorlage erweitern.

182
00:09:19,690 --> 00:09:22,323
‫Und dann erstellen Sie diesen Block wie immer hier.

183
00:09:23,300 --> 00:09:26,040
‫Also Inhalt blockieren.

184
00:09:26,040 --> 00:09:29,200
‫Und dann muss das alles drin sein.

185
00:09:29,200 --> 00:09:31,080
‫Im Grunde machen

186
00:09:31,080 --> 00:09:35,070
‫wir hier genau dasselbe wie bei allen anderen Vorlagen.

187
00:09:35,070 --> 00:09:37,430
‫Im Grunde fügen Sie diesen

188
00:09:37,430 --> 00:09:40,693
‫Inhalt hier in den Inhaltsblog in der Basisvorlage ein.

189
00:09:42,370 --> 00:09:47,370
‫Wenn wir das also jetzt neu laden, dann sieht es endlich so aus, wie beabsichtigt.

190
00:09:48,090 --> 00:09:48,923
‫In Ordung?

191
00:09:49,870 --> 00:09:53,670
‫Und jetzt, wenn wir tatsächlich einen Fehler in unserem Code

192
00:09:53,670 --> 00:09:56,290
‫hatten, und sagen wir noch einmal,

193
00:09:56,290 --> 00:09:59,210
‫dass wir diese Fehlerbehandlung hier nicht haben, dann

194
00:09:59,210 --> 00:10:02,713
‫wird natürlich der gesamte Fehler an den Client weitergegeben.

195
00:10:06,520 --> 00:10:09,410
‫Daher kann der Eigenschaftsname null nicht gelesen werden.

196
00:10:09,410 --> 00:10:12,140
‫Und natürlich möchten wir nicht, dass unsere

197
00:10:12,140 --> 00:10:14,630
‫Website-Besucher solche Fehler bekommen, oder?

198
00:10:14,630 --> 00:10:17,040
‫Niemand würde wirklich verstehen, was das bedeutet.

199
00:10:17,040 --> 00:10:20,520
‫Und darum kümmern wir uns jetzt

200
00:10:20,520 --> 00:10:22,570
‫in unserem Produktionsfehlerhandler.

201
00:10:22,570 --> 00:10:25,300
‫Hier unten in unserem Fehlercontroller wenden

202
00:10:25,300 --> 00:10:28,770
‫wir nun dieselbe Logik an, die wir hier haben.

203
00:10:28,770 --> 00:10:32,840
‫Testen Sie also, ob wir derzeit mit der API umgehen oder nicht.

204
00:10:32,840 --> 00:10:35,370
‫Und natürlich könnte es elegantere Möglichkeiten geben, dies

205
00:10:35,370 --> 00:10:36,380
‫zu tun.

206
00:10:36,380 --> 00:10:38,820
‫Sie könnten beispielsweise eine komplett separate

207
00:10:38,820 --> 00:10:41,450
‫Middleware zur Fehlerbehandlung nur für die API und

208
00:10:41,450 --> 00:10:44,020
‫eine für die gerenderte Website haben, oder?

209
00:10:44,020 --> 00:10:47,763
‫Aber auch hier möchte ich es einfach etwas einfacher halten.

210
00:10:49,160 --> 00:10:49,993
‫Okay?

211
00:10:49,993 --> 00:10:52,283
‫Das ist in diesem Fall also wirklich mein Hauptziel.

212
00:10:53,570 --> 00:10:54,600
‫In Ordung.

213
00:10:54,600 --> 00:10:56,750
‫Lassen Sie uns all dies auswählen.

214
00:10:56,750 --> 00:10:57,950
‫Ach, was ist da passiert?

215
00:11:04,880 --> 00:11:05,783
‫Ach, los geht's.

216
00:11:07,628 --> 00:11:08,461
‫Okay.

217
00:11:08,461 --> 00:11:09,773
‫Das ist also für die API.

218
00:11:12,490 --> 00:11:15,140
‫Und jetzt werden wir tatsächlich etwas ganz Ähnliches haben.

219
00:11:25,280 --> 00:11:27,883
‫Dies ist also wieder für die gerenderte Website.

220
00:11:30,950 --> 00:11:35,950
‫Nennen wir es hier B und hier A.

221
00:11:36,380 --> 00:11:38,790
‫Also nur um es etwas besser zu trennen.

222
00:11:38,790 --> 00:11:40,873
‫Also haben wir und dann B hier unten.

223
00:11:42,600 --> 00:11:45,513
‫Wie auch immer, dies wird diesem hier ein wenig ähnlich sehen.

224
00:11:46,700 --> 00:11:51,433
‫Wenn wir also einen Betriebsfehler haben, sollte die Fehlerseite

225
00:11:52,940 --> 00:11:54,470
‫im Grunde

226
00:11:54,470 --> 00:11:57,470
‫genauso aussehen wie hier zuvor.

227
00:11:57,470 --> 00:12:01,640
‫Aber für den Fall, dass es sich um einen Programmierfehler

228
00:12:01,640 --> 00:12:05,950
‫oder einen unbekannten Fehler handelt, wollen wir nicht die vollständige Nachricht,

229
00:12:05,950 --> 00:12:08,640
‫sondern nur eine sehr allgemeine Nachricht.

230
00:12:08,640 --> 00:12:13,640
‫Bitte versuchen Sie es später erneut.

231
00:12:14,490 --> 00:12:15,660
‫In Ordung?

232
00:12:15,660 --> 00:12:18,770
‫Sehen wir uns nun an, welche Art von Fehler wir hier bekommen.

233
00:12:18,770 --> 00:12:21,350
‫Und anscheinend erhalten wir hier etwas, das

234
00:12:21,350 --> 00:12:23,380
‫als einsames if-Statement bezeichnet wird.

235
00:12:23,380 --> 00:12:24,213
‫Rechts.

236
00:12:24,213 --> 00:12:25,900
‫Also ja, Lint möchte

237
00:12:25,900 --> 00:12:29,000
‫nicht, dass wir nur ein if innerhalb eines else-Blocks haben.

238
00:12:29,000 --> 00:12:31,580
‫Und ich stimme zu,

239
00:12:31,580 --> 00:12:34,280
‫dass es keine schöne Programmierpraxis ist.

240
00:12:34,280 --> 00:12:36,280
‫Lassen Sie uns das also in der Tat

241
00:12:37,500 --> 00:12:39,483
‫beheben, indem wir das andere hier loswerden.

242
00:12:41,600 --> 00:12:42,740
‫Sparen Sie.

243
00:12:42,740 --> 00:12:44,540
‫Und dann ist dieser Fehler weg.

244
00:12:44,540 --> 00:12:47,530
‫Aber jetzt müssen wir sicherstellen, dass dies

245
00:12:47,530 --> 00:12:50,230
‫hier wirklich den Request-Response-Zyklus beendet.

246
00:12:50,230 --> 00:12:54,843
‫Und so müssen wir auch hier und hier zurückkehren.

247
00:12:56,240 --> 00:12:57,580
‫In Ordung.

248
00:12:57,580 --> 00:13:02,150
‫Jetzt noch ein ESLint-Fehler, sonst unnötig nach einer Rückkehr.

249
00:13:02,150 --> 00:13:04,090
‫Und das stimmt auch.

250
00:13:04,090 --> 00:13:05,760
‫Und ich habe diese Regel

251
00:13:05,760 --> 00:13:08,330
‫während des gesamten Kurses befolgt, weil ich es selbst

252
00:13:08,330 --> 00:13:09,453
‫als Programmierpraxis mag.

253
00:13:10,360 --> 00:13:13,723
‫Also, ja, lass uns das hier dann loswerden.

254
00:13:15,000 --> 00:13:18,080
‫Ich glaube wirklich, und ich glaube es schon

255
00:13:18,080 --> 00:13:22,050
‫lange, dass es ohne diese wenn-sons-Anweisungen viel schöner aussieht, sondern

256
00:13:22,050 --> 00:13:25,660
‫nur mit einem wenn, wie hier hier, und dann

257
00:13:25,660 --> 00:13:28,253
‫das else außerhalb davon mit einbezieht.

258
00:13:29,240 --> 00:13:31,300
‫Okay, das haben wir jetzt hier.

259
00:13:31,300 --> 00:13:33,373
‫Setzen wir hier auch A und B ein.

260
00:13:34,240 --> 00:13:35,073
‫B.

261
00:13:36,020 --> 00:13:38,613
‫Und tatsächlich, lassen Sie uns hier genau dasselbe tun.

262
00:13:39,930 --> 00:13:41,033
‫Also zurück.

263
00:13:44,820 --> 00:13:46,513
‫Gib auch diesen zurück.

264
00:13:52,160 --> 00:13:53,653
‫Dann auch hier A und B.

265
00:13:57,150 --> 00:14:00,540
‫Also für mich sieht das in der Tat sauberer aus.

266
00:14:00,540 --> 00:14:02,450
‫Jetzt haben wir A hier und

267
00:14:02,450 --> 00:14:04,733
‫A hier wieder, aber nun, egal an dieser Stelle.

268
00:14:05,570 --> 00:14:06,403
‫In Ordung.

269
00:14:07,320 --> 00:14:08,993
‫Also kehre hierher zurück.

270
00:14:11,260 --> 00:14:12,190
‫Kehren Sie hierher zurück.

271
00:14:12,190 --> 00:14:15,863
‫Und bevor es mich anschreit, lass uns das entfernen.

272
00:14:17,630 --> 00:14:19,773
‫Und damit ist es wieder besser.

273
00:14:23,120 --> 00:14:24,833
‫Also stell das hier raus.

274
00:14:25,770 --> 00:14:28,950
‫Und das sollte es eigentlich sein.

275
00:14:28,950 --> 00:14:29,840
‫In Ordung?

276
00:14:29,840 --> 00:14:31,950
‫Lassen Sie uns

277
00:14:31,950 --> 00:14:35,660
‫der Vollständigkeit halber auch diesen Kommentar hier kopieren.

278
00:14:35,660 --> 00:14:39,333
‫Und dann nenne das hier wieder B.

279
00:14:41,160 --> 00:14:42,520
‫In Ordung.

280
00:14:42,520 --> 00:14:43,353
‫Perfekt.

281
00:14:44,720 --> 00:14:46,910
‫Lassen Sie uns diesen hier auch tatsächlich

282
00:14:46,910 --> 00:14:48,603
‫in die Entwicklungsfunktion kopieren.

283
00:14:49,770 --> 00:14:52,500
‫Denn im Moment haben wir, sobald wir diesen

284
00:14:52,500 --> 00:14:55,723
‫Fehler zurücksenden, wirklich keine Möglichkeit, den vollständigen Fehler zu sehen.

285
00:14:58,460 --> 00:15:02,930
‫Okay, also, entfernen Sie es, um es sichtbarer zu machen.

286
00:15:02,930 --> 00:15:04,483
‫Und das ist jetzt schön.

287
00:15:05,740 --> 00:15:06,900
‫Okay.

288
00:15:06,900 --> 00:15:08,800
‫Beenden wir es

289
00:15:08,800 --> 00:15:12,300
‫jetzt hier, damit wir unsere Produktionsanwendung starten können.

290
00:15:12,300 --> 00:15:15,670
‫Also im Grunde läuft es jetzt in der Produktion.

291
00:15:15,670 --> 00:15:18,500
‫Und wir haben ein Skript

292
00:15:19,800 --> 00:15:23,970
‫dafür, das sich npm run start production nennt.

293
00:15:27,220 --> 00:15:28,560
‫Okay?

294
00:15:28,560 --> 00:15:31,100
‫Wenn wir das also jetzt testen, sollten

295
00:15:31,100 --> 00:15:34,430
‫wir diese Zeichenfolge hier nicht mehr sehen, erinnerst du dich?

296
00:15:34,430 --> 00:15:37,090
‫Denn an dieser Stelle haben wir keine

297
00:15:37,090 --> 00:15:39,610
‫Fehlerbehandlung für einen solchen ungültigen Tournamen.

298
00:15:39,610 --> 00:15:40,637
‫Okay?

299
00:15:40,637 --> 00:15:41,470
‫Rechts?

300
00:15:41,470 --> 00:15:42,303
‫Da wir in

301
00:15:42,303 --> 00:15:44,220
‫der Produktion sind und es sich nicht um

302
00:15:44,220 --> 00:15:46,127
‫einen Betriebsfehler handelt, wollen wir dies nicht sehen.

303
00:15:46,127 --> 00:15:49,400
‫Und das haben wir gerade vorher codiert.

304
00:15:49,400 --> 00:15:53,030
‫Dies ist in der Tat die allgemeinere Fehlermeldung.

305
00:15:53,030 --> 00:15:54,070
‫Rechts?

306
00:15:54,070 --> 00:15:59,070
‫Aber wenn wir es dann hier im Views-Controller zurücksetzen, also

307
00:16:00,800 --> 00:16:03,170
‫wenn wir diese Fehlerbehandlung zurücksetzen,

308
00:16:03,170 --> 00:16:06,150
‫dann natürlich, da dies hier jetzt

309
00:16:06,150 --> 00:16:09,830
‫ein Betriebsfehler ist, dann erhalten wir natürlich

310
00:16:09,830 --> 00:16:11,460
‫diesen Fehlerstring.

311
00:16:11,460 --> 00:16:12,930
‫Weil es immer schön

312
00:16:12,930 --> 00:16:15,400
‫ist, dem Benutzer eine freundliche Nachricht zu zeigen.

313
00:16:15,400 --> 00:16:18,453
‫Aber wie Sie gesehen haben, ist das tatsächlich nicht passiert.

314
00:16:19,540 --> 00:16:22,383
‫Warum also?

315
00:16:25,140 --> 00:16:28,450
‫Nun, wir sind im Produktionsfehler.

316
00:16:28,450 --> 00:16:31,070
‫Wir befinden uns auf der gerenderten Website.

317
00:16:31,070 --> 00:16:34,290
‫Und tatsächlich haben wir einen Bedienungsfehler.

318
00:16:34,290 --> 00:16:35,483
‫Und so ...

319
00:16:39,010 --> 00:16:40,263
‫Wir haben das vor Ort.

320
00:16:41,200 --> 00:16:45,010
‫Und so sollte es tatsächlich so funktionieren, wie wir es erwartet haben.

321
00:16:45,010 --> 00:16:47,200
‫Nun, versuchen wir einfach, die Fehlerpunktnachricht in der Konsole

322
00:16:48,540 --> 00:16:49,880
‫zu loggen, nur um

323
00:16:51,740 --> 00:16:54,573
‫zu sehen, ob wir sie zu diesem Zeitpunkt tatsächlich erhalten haben.

324
00:16:56,140 --> 00:16:57,570
‫In Ordung.

325
00:16:57,570 --> 00:16:59,480
‫Lade diesen Kerl neu.

326
00:16:59,480 --> 00:17:01,853
‫Und damit liegt der Fehler vor.

327
00:17:02,720 --> 00:17:05,170
‫Aber trotzdem ist das sehr seltsam.

328
00:17:05,170 --> 00:17:07,363
‫Damit ist ja der gesamte Fehler protokolliert.

329
00:17:15,210 --> 00:17:16,120
‫Sehr eigenartig.

330
00:17:16,120 --> 00:17:20,560
‫Denn aus irgendeinem Grund ist die Nachricht auch nicht da.

331
00:17:20,560 --> 00:17:24,363
‫Lassen Sie es uns also noch einmal in der Entwicklung ausführen.

332
00:17:25,968 --> 00:17:26,883
‫Also npm starten.

333
00:17:30,120 --> 00:17:30,953
‫In Ordung.

334
00:17:31,940 --> 00:17:35,460
‫Und hier erhält es aus irgendeinem Grund Zugriff auf diese Nachricht.

335
00:17:35,460 --> 00:17:38,110
‫Das bedeutet, dass wir diese Nachricht in

336
00:17:38,110 --> 00:17:40,553
‫unserem Views-Controller tatsächlich richtig gesetzt haben.

337
00:17:44,410 --> 00:17:45,983
‫Führen Sie es erneut in der Produktion aus.

338
00:17:48,080 --> 00:17:52,183
‫Das ist also die Art von Sachen, die wir nicht mögen, oder?

339
00:17:54,370 --> 00:17:57,670
‫Werfen wir also einen Blick darauf, wo unser

340
00:17:57,670 --> 00:17:59,550
‫Produktionsfehler tatsächlich entsteht.

341
00:17:59,550 --> 00:18:01,320
‫Und das ist hier.

342
00:18:01,320 --> 00:18:04,720
‫Dieses Fehlerobjekt, das wir hier in der Produktion verwenden,

343
00:18:04,720 --> 00:18:08,020
‫ist also eine Kopie dieses Fehlers, richtig?

344
00:18:08,020 --> 00:18:10,960
‫Also der, der in diese Middleware kommt.

345
00:18:10,960 --> 00:18:15,960
‫Schauen wir uns also beide in der Konsole

346
00:18:15,960 --> 00:18:17,083
‫an.

347
00:18:18,850 --> 00:18:20,803
‫Also Fehlerpunktmeldung.

348
00:18:23,636 --> 00:18:26,303
‫Und dann auch Fehlerpunktmeldung.

349
00:18:29,930 --> 00:18:31,203
‫Also mach das nochmal.

350
00:18:34,070 --> 00:18:35,620
‫Okay.

351
00:18:35,620 --> 00:18:37,470
‫Wir sehen also diesen

352
00:18:37,470 --> 00:18:40,590
‫Fehler, also der, der direkt in unsere Middleware-Funktion

353
00:18:40,590 --> 00:18:42,630
‫eingeht, hat tatsächlich die Meldung.

354
00:18:42,630 --> 00:18:45,730
‫Aber das, was wir kopieren, also Fehler, aus

355
00:18:45,730 --> 00:18:47,380
‫irgendeinem Grund nicht.

356
00:18:47,380 --> 00:18:49,870
‫Und dieser Trick, den wir hier

357
00:18:49,870 --> 00:18:53,160
‫machen, kopiert aus irgendeinem Grund die Nachricht nicht,

358
00:18:53,160 --> 00:18:54,130
‫in Ordnung?

359
00:18:54,130 --> 00:18:57,930
‫Also lassen Sie uns das schnell beheben.

360
00:18:57,930 --> 00:19:02,930
‫Und nehmen wir an, dass die Fehlerpunktnachricht gleich der Fehlerpunktnachricht ist.

361
00:19:07,100 --> 00:19:07,933
‫In Ordung?

362
00:19:07,933 --> 00:19:10,963
‫Und damit sollte es dann hoffentlich behoben sein.

363
00:19:13,210 --> 00:19:14,660
‫Ah, in Ordnung.

364
00:19:14,660 --> 00:19:15,653
‫Auf geht's.

365
00:19:16,910 --> 00:19:17,743
‫Rechts.

366
00:19:19,430 --> 00:19:22,930
‫Jetzt sehen Sie, dass sie tatsächlich gleich sind.

367
00:19:22,930 --> 00:19:24,330
‫Und das war das Problem.

368
00:19:25,490 --> 00:19:26,330
‫In Ordung?

369
00:19:26,330 --> 00:19:28,010
‫Ohne dies würden

370
00:19:28,010 --> 00:19:30,543
‫also eigentlich alle Fehler nicht richtig funktionieren.

371
00:19:31,610 --> 00:19:33,860
‫Also wenn wir das hier rausstellen

372
00:19:33,860 --> 00:19:38,860
‫und zum Beispiel versuchen einzuloggen, so admin@natours. io.

373
00:19:47,490 --> 00:19:50,970
‫Sie sehen also, auch hier erhalten wir einen undefinierten Fehler.

374
00:19:50,970 --> 00:19:51,890
‫In Ordung.

375
00:19:51,890 --> 00:19:54,630
‫Dies liegt wiederum daran, dass wir uns

376
00:19:54,630 --> 00:19:58,860
‫in der Produktion befinden und unser Fehlerobjekt die Nachricht nicht korrekt kopiert hat.

377
00:19:58,860 --> 00:20:01,400
‫Ich bin mir nicht sicher, warum ich das nicht

378
00:20:01,400 --> 00:20:03,780
‫mitbekommen habe, als wir es tatsächlich implementiert haben.

379
00:20:03,780 --> 00:20:07,253
‫Aber vielleicht habe ich es nicht gründlich genug getestet.

380
00:20:08,240 --> 00:20:09,640
‫Okay?

381
00:20:09,640 --> 00:20:11,403
‫Und egal, wenn wir das

382
00:20:12,470 --> 00:20:15,320
‫jetzt versuchen, bekommen wir jetzt die richtige Fehlermeldung, die

383
00:20:15,320 --> 00:20:16,370
‫wir erwarten.

384
00:20:18,230 --> 00:20:19,300
‫In Ordung.

385
00:20:19,300 --> 00:20:20,133
‫Groß.

386
00:20:20,133 --> 00:20:21,360
‫Das ist also gelöst.

387
00:20:21,360 --> 00:20:24,950
‫Und damit ist dieses Video eigentlich abgeschlossen.

388
00:20:24,950 --> 00:20:26,250
‫Zusammenfassend lässt

389
00:20:26,250 --> 00:20:28,740
‫sich sagen, dass wir jetzt

390
00:20:28,740 --> 00:20:33,740
‫eine Fehlerbehandlungsstrategie haben, die wie bisher für die Entwicklung und auch

391
00:20:34,050 --> 00:20:35,780
‫für die Produktion funktioniert.

392
00:20:35,780 --> 00:20:39,000
‫Und dann haben wir in jedem von ihnen im Grunde zwei Filialen.

393
00:20:39,000 --> 00:20:41,500
‫Man schickt die Fehlermeldung für die API, das

394
00:20:41,500 --> 00:20:43,397
‫ist genau das, was wir vorher

395
00:20:43,397 --> 00:20:46,640
‫hatten, und dann haben wir jetzt auch eine Art Handler

396
00:20:46,640 --> 00:20:48,430
‫für die gerenderte Website.

397
00:20:48,430 --> 00:20:52,220
‫In diesem Fall rendern wir unsere Fehlervorlage.

398
00:20:52,220 --> 00:20:54,850
‫In der Produktion unterscheiden wir dann

399
00:20:54,850 --> 00:20:57,620
‫auch noch zwischen gerenderter Website und API.

400
00:20:57,620 --> 00:20:59,270
‫Und dann unterscheiden

401
00:20:59,270 --> 00:21:01,700
‫wir auch innerhalb jedes dieser Zweige

402
00:21:01,700 --> 00:21:03,784
‫nach wie vor zwischen

403
00:21:03,784 --> 00:21:06,293
‫den Bedienungsfehlern und den unbekannten Fehlern.

404
00:21:07,240 --> 00:21:09,140
‫Also betriebsbereit und unbekannt.

405
00:21:09,140 --> 00:21:13,230
‫Und dann innen gerendert, auch betriebsbereit und unbekannt.

406
00:21:13,230 --> 00:21:15,490
‫Wenn wir also für die

407
00:21:15,490 --> 00:21:18,600
‫gerenderte Website einen Betriebsfehler haben, also einen

408
00:21:18,600 --> 00:21:21,270
‫vertrauenswürdigen, senden wir unsere vertrauenswürdige Fehlermeldung.

409
00:21:21,270 --> 00:21:23,590
‫Wenn wir dem Fehler jedoch nicht

410
00:21:23,590 --> 00:21:25,150
‫vertrauen, also wenn wir

411
00:21:25,150 --> 00:21:29,560
‫ihn nicht kennen, senden wir diese generische Nachricht einfach an den Benutzer zurück.

412
00:21:29,560 --> 00:21:31,630
‫So großartig.

413
00:21:31,630 --> 00:21:35,050
‫Lassen Sie uns das hier beenden und zurück zur

414
00:21:35,920 --> 00:21:38,350
‫Entwicklung gehen und diesen Vortrag abschließen.

415
00:21:38,350 --> 00:21:39,763
‫Also bis zum nächsten.

