﻿1
00:00:01,120 --> 00:00:02,420
‫Kursleiter: In diesem Video

2
00:00:02,420 --> 00:00:06,120
‫lernen wir das Debuggen von Node. JS, weil, seien wir ehrlich, es

3
00:00:06,120 --> 00:00:09,240
‫wird immer einige Fehler in unserem Code geben, egal

4
00:00:09,240 --> 00:00:11,040
‫wie vorsichtig wir sind.

5
00:00:11,040 --> 00:00:13,910
‫Daher ist es gut, ein Tool zu haben, das uns

6
00:00:13,910 --> 00:00:15,740
‫beim Debuggen unseres Codes hilft.

7
00:00:15,740 --> 00:00:18,870
‫Es geht hier nicht wirklich um die Fehlerbehandlung mit Express, aber

8
00:00:18,870 --> 00:00:21,200
‫ich dachte, dies wäre ein guter Punkt im

9
00:00:21,200 --> 00:00:23,510
‫Kurs, um Ihnen ein Debugging-Tool vorzustellen,

10
00:00:23,510 --> 00:00:26,423
‫das wir dann im weiteren Verlauf des Kurses verwenden könnten.

11
00:00:27,920 --> 00:00:31,270
‫Und es gibt verschiedene Möglichkeiten zum Debuggen von Node. JS-Code.

12
00:00:31,270 --> 00:00:33,740
‫Zum Beispiel könnten wir dafür VS-Code verwenden.

13
00:00:33,740 --> 00:00:38,190
‫Aber tatsächlich hat Google vor kurzem ein erstaunliches Tool veröffentlicht,

14
00:00:38,190 --> 00:00:42,840
‫das wir zum Debuggen verwenden können, das sich NDB nennt, in Ordnung?

15
00:00:42,840 --> 00:00:46,610
‫Gehen wir also zu unserem anderen Terminal hier über

16
00:00:46,610 --> 00:00:48,850
‫und installieren Sie dann NDB.

17
00:00:48,850 --> 00:00:51,720
‫Und NDB, was für Node Debugger steht,

18
00:00:51,720 --> 00:00:53,823
‫ist eigentlich nur ein NPM-Paket.

19
00:00:54,780 --> 00:00:56,927
‫Also NPM installiert NDB.

20
00:00:58,440 --> 00:01:00,250
‫In Ordnung, und Sie

21
00:01:00,250 --> 00:01:04,120
‫sollten es dann als globales Paket installieren, in Ordnung?

22
00:01:04,120 --> 00:01:07,563
‫Und wenn Sie einen Mac verwenden, benötigen Sie möglicherweise globale Berechtigungen.

23
00:01:08,440 --> 00:01:10,890
‫Also einfach Sudo hier vorne schreiben.

24
00:01:10,890 --> 00:01:14,720
‫Oder wenn Sie es überhaupt nicht global installieren können,

25
00:01:14,720 --> 00:01:17,610
‫können Sie es immer nur lokal als

26
00:01:17,610 --> 00:01:19,003
‫Todesabhängigkeit installieren.

27
00:01:20,040 --> 00:01:22,420
‫Also einfach so, in Ordnung?

28
00:01:22,420 --> 00:01:25,000
‫Wie auch immer, bitte fahren Sie fort und installieren Sie dieses Tool jetzt.

29
00:01:25,000 --> 00:01:25,870
‫Ich werde

30
00:01:25,870 --> 00:01:28,590
‫es nicht tun, weil es ein ziemlich schwerer Download sein

31
00:01:28,590 --> 00:01:30,630
‫kann, und das dauert jetzt etwas zu lange.

32
00:01:30,630 --> 00:01:33,720
‫Wie auch immer, sobald Sie das Tool installiert haben, gehen wir

33
00:01:33,720 --> 00:01:36,130
‫zum Paket über. jason und

34
00:01:36,130 --> 00:01:39,710
‫füge hier ein neues Skript hinzu, in Ordnung?

35
00:01:39,710 --> 00:01:42,173
‫Und das nenne ich mal Debug.

36
00:01:43,770 --> 00:01:44,900
‫Okay?

37
00:01:44,900 --> 00:01:47,270
‫Der Befehl, den wir hier

38
00:01:47,270 --> 00:01:50,890
‫ausführen möchten, ist also einfach NDB, also der

39
00:01:50,890 --> 00:01:53,250
‫Notiz-Debugger und dann wieder unser

40
00:01:53,250 --> 00:01:57,103
‫Einstiegspunkt, also Server. js Okay?

41
00:01:57,103 --> 00:01:59,200
‫Und jetzt wird das funktionieren, egal

42
00:01:59,200 --> 00:02:01,320
‫ob Sie NDB lokal oder global installiert haben.

43
00:02:01,320 --> 00:02:03,537
‫In Ordnung, also lassen Sie uns jetzt das Skript ausführen.

44
00:02:03,537 --> 00:02:05,260
‫Und damit das

45
00:02:05,260 --> 00:02:07,690
‫funktioniert, müssen wir diesen Prozess tatsächlich abschließen,

46
00:02:07,690 --> 00:02:09,460
‫da er im Grunde auch

47
00:02:09,460 --> 00:02:12,210
‫den Server startet und dann versucht, dies auf

48
00:02:12,210 --> 00:02:14,120
‫demselben Port zu tun, und

49
00:02:14,120 --> 00:02:15,980
‫das wird natürlich nicht funktionieren.

50
00:02:15,980 --> 00:02:18,450
‫Wir müssen also das derzeit laufende beenden

51
00:02:18,450 --> 00:02:21,670
‫und dann können wir von hier aus NPM ausführen

52
00:02:21,670 --> 00:02:22,503
‫debug ausführen.

53
00:02:23,690 --> 00:02:24,523
‫In

54
00:02:24,523 --> 00:02:26,370
‫Ordnung, und jetzt sollte sich

55
00:02:26,370 --> 00:02:28,230
‫ein neues Chrome-Fenster öffnen, also

56
00:02:29,070 --> 00:02:31,220
‫ein sogenanntes kopfloses Chrome, aber es

57
00:02:31,220 --> 00:02:32,690
‫ist kein echtes Chrome.

58
00:02:32,690 --> 00:02:34,890
‫Sie sehen das Chrome-Symbol hier unten

59
00:02:34,890 --> 00:02:36,550
‫und auch hier in

60
00:02:36,550 --> 00:02:39,410
‫der Menüleiste, aber das ist wirklich nur der Notiz-Debugger.

61
00:02:39,410 --> 00:02:41,260
‫Was haben wir also hier?

62
00:02:41,260 --> 00:02:45,030
‫Auf der linken Seite haben wir unser komplettes Dateisystem.

63
00:02:45,030 --> 00:02:48,010
‫Wir haben hier auch Zugriff auf unsere NPM-Skripte,

64
00:02:48,010 --> 00:02:50,810
‫die wir von hier aus ausführen können.

65
00:02:50,810 --> 00:02:52,910
‫Wir haben auch eine Konsole und hier

66
00:02:52,910 --> 00:02:55,610
‫haben wir unsere üblichen Ausgaben mit der laufenden

67
00:02:55,610 --> 00:02:57,310
‫App und der Datenbankverbindung

68
00:02:58,570 --> 00:03:01,330
‫und wir haben auch die Registerkarten Leistung und Speicher,

69
00:03:01,330 --> 00:03:03,090
‫die wir nicht verwenden werden.

70
00:03:03,090 --> 00:03:05,170
‫Alles klar, wenn Sie mit

71
00:03:05,170 --> 00:03:07,130
‫dem allgemeinen Debugging-Prozess vertraut

72
00:03:07,130 --> 00:03:10,100
‫sind, wird Ihnen das alles irgendwie bekannt vorkommen.

73
00:03:10,100 --> 00:03:12,260
‫Alles klar, aber wenn Sie sich keine Sorgen

74
00:03:12,260 --> 00:03:13,810
‫machen, werde ich Ihnen in diesem

75
00:03:13,810 --> 00:03:15,240
‫Video ein paar Techniken zeigen.

76
00:03:15,240 --> 00:03:19,560
‫Okay, trotzdem öffnen wir jetzt unseren Server. js.

77
00:03:19,560 --> 00:03:21,460
‫Und wirklich erstaunlich ist, dass

78
00:03:21,460 --> 00:03:24,500
‫wir unsere Dateien hier, also direkt in diesem

79
00:03:24,500 --> 00:03:26,040
‫Debugger, bearbeiten können.

80
00:03:26,040 --> 00:03:28,530
‫Nehmen wir zum Beispiel an, wir finden einen

81
00:03:28,530 --> 00:03:30,820
‫Fehler und wollen ihn dann sofort beheben.

82
00:03:30,820 --> 00:03:33,340
‫Das können wir direkt hier im Debugger machen

83
00:03:33,340 --> 00:03:35,790
‫und dann wird der Originalcode aktualisiert.

84
00:03:35,790 --> 00:03:37,020
‫Um es zu testen,

85
00:03:37,020 --> 00:03:38,943
‫fügen wir einfach hier unten einen Kommentar hinzu.

86
00:03:40,050 --> 00:03:44,460
‫Also, testen Sie, dann drücken Sie Command oder Control s, um zu speichern, und dann,

87
00:03:44,460 --> 00:03:46,570
‫wenn wir zu unserem Code zurückkehren und

88
00:03:47,830 --> 00:03:49,800
‫den Server öffnen. js dort

89
00:03:49,800 --> 00:03:53,060
‫sehen Sie, dass der Kommentar tatsächlich hier ist.

90
00:03:53,060 --> 00:03:53,950
‫Okay?

91
00:03:53,950 --> 00:03:55,810
‫Und wenn wir es jetzt

92
00:03:55,810 --> 00:03:57,370
‫von hier löschen,

93
00:03:57,370 --> 00:03:59,220
‫speichern und zurück zum

94
00:03:59,220 --> 00:04:02,300
‫Debugger, dann ist es auch von hier weg.

95
00:04:02,300 --> 00:04:04,810
‫Okay, aber jetzt zum Debugging selbst.

96
00:04:04,810 --> 00:04:06,860
‫Ich würde sagen, dass der

97
00:04:06,860 --> 00:04:09,740
‫grundlegende Aspekt des Debuggens darin besteht, Breakpoints zu setzen.

98
00:04:09,740 --> 00:04:12,420
‫Breakpoints sind also im Grunde Punkte in unserem Code, die

99
00:04:12,420 --> 00:04:14,540
‫wir hier im Debugger definieren können,

100
00:04:14,540 --> 00:04:16,810
‫an denen unser Code dann aufhört zu laufen.

101
00:04:16,810 --> 00:04:18,810
‫Es wird im Grunde mit der

102
00:04:18,810 --> 00:04:21,900
‫Zeit einfrieren und wir können uns dann alle unsere Variablen ansehen.

103
00:04:21,900 --> 00:04:24,530
‫Okay, das wird dann sehr nützlich sein, um

104
00:04:24,530 --> 00:04:26,270
‫einige Fehler zu finden.

105
00:04:26,270 --> 00:04:28,340
‫Im Moment gibt es hier keinen

106
00:04:28,340 --> 00:04:30,860
‫Fehler, aber fügen wir noch einen Haltepunkt hinzu.

107
00:04:30,860 --> 00:04:34,850
‫Und ich werde diesen Breakpoint hier in dieser Zeile 21 hinzufügen.

108
00:04:34,850 --> 00:04:36,610
‫Also klicke ich hier auf diese

109
00:04:36,610 --> 00:04:38,920
‫Zeile und dann siehst du diese grüne Markierung, okay?

110
00:04:38,920 --> 00:04:41,600
‫Das bedeutet, dass der Code an dieser Stelle

111
00:04:41,600 --> 00:04:43,950
‫stoppt, wenn wir ihn ausführen, okay?

112
00:04:43,950 --> 00:04:45,750
‫Und Sie können es hier

113
00:04:45,750 --> 00:04:48,850
‫auf der rechten Seite auch hier auf der Registerkarte Breakpoints sehen.

114
00:04:48,850 --> 00:04:50,680
‫Nun, unsere Anwendung läuft zu

115
00:04:50,680 --> 00:04:52,360
‫diesem Zeitpunkt tatsächlich

116
00:04:52,360 --> 00:04:55,350
‫bereits und wartet im Grunde auf Anfragen.

117
00:04:55,350 --> 00:04:56,830
‫Was wir hier tun müssen,

118
00:04:56,830 --> 00:05:00,810
‫ist, mit der rechten Maustaste zu klicken und dann auf Dieses Skript ausführen zu klicken.

119
00:05:00,810 --> 00:05:02,670
‫Okay, und damit wird das Skript dann

120
00:05:02,670 --> 00:05:04,153
‫im Grunde wieder hier ausgeführt.

121
00:05:05,638 --> 00:05:06,720
‫Gut?

122
00:05:06,720 --> 00:05:08,390
‫Und so geht's.

123
00:05:08,390 --> 00:05:10,380
‫Sie sehen also hier auf

124
00:05:10,380 --> 00:05:12,940
‫der rechten Seite, dass am Breakpoint pausiert steht

125
00:05:12,940 --> 00:05:16,040
‫und somit der gesamte Code, der hier über diesem Breakpoint

126
00:05:16,040 --> 00:05:18,330
‫liegt, an dieser Stelle bereits ausgeführt wurde.

127
00:05:18,330 --> 00:05:21,390
‫Und so können wir uns jetzt die Variablen anschauen.

128
00:05:21,390 --> 00:05:24,230
‫Zum Beispiel können wir diese Portvariable mit der

129
00:05:24,230 --> 00:05:27,220
‫Maus bewegen und sehen, dass sie auf 3.000 gesetzt ist.

130
00:05:27,220 --> 00:05:29,670
‫Und hier im Code auch tatsächlich auf

131
00:05:29,670 --> 00:05:31,560
‫diese Stelle getroffen, in Ordnung.

132
00:05:31,560 --> 00:05:33,830
‫Und dann ist die dritte Möglichkeit, es zu sehen,

133
00:05:33,830 --> 00:05:35,380
‫hier auf der rechten Seite.

134
00:05:35,380 --> 00:05:38,280
‫Wir haben hier also ein paar grundsätzliche Registerkarten,

135
00:05:38,280 --> 00:05:40,940
‫also Node-Prozesse, die Uhr, den Call-Stack, was

136
00:05:40,940 --> 00:05:43,240
‫im Moment nicht wirklich wichtig ist.

137
00:05:43,240 --> 00:05:46,940
‫Der Geltungsbereich, und der Geltungsbereich ist der Ort, an dem sich

138
00:05:46,940 --> 00:05:49,050
‫alle unsere Variablen befinden, okay?

139
00:05:49,050 --> 00:05:52,530
‫Und so haben Sie auch hier den Port auf 3.000 gesetzt.

140
00:05:52,530 --> 00:05:54,620
‫Okay, und hier sehen Sie auch

141
00:05:54,620 --> 00:05:57,010
‫die fünf Variablen, auf die wir in

142
00:05:57,010 --> 00:05:58,490
‫allen Modulen Zugriff haben.

143
00:05:58,490 --> 00:06:01,290
‫Erinnern Sie sich noch an die Modellvorlesung?

144
00:06:01,290 --> 00:06:03,590
‫Wir haben also den Verzeichnisnamen,

145
00:06:03,590 --> 00:06:07,250
‫wir haben den Dateinamen, wir haben die Anforderungsfunktion, wir haben

146
00:06:07,250 --> 00:06:10,150
‫das Modul und wir haben den Export.

147
00:06:10,150 --> 00:06:12,690
‫Denken Sie also daran, dass dies die fünf

148
00:06:12,690 --> 00:06:15,400
‫Variablen sind, die in jedem einzelnen Modul verfügbar sind.

149
00:06:15,400 --> 00:06:17,960
‫Und tatsächlich, wenn wir einen solchen

150
00:06:17,960 --> 00:06:21,730
‫Code im Debugger ausführen, können wir sehen, dass unser gesamter

151
00:06:21,730 --> 00:06:24,383
‫Code tatsächlich in diese Funktion eingeschlossen ist.

152
00:06:25,390 --> 00:06:26,560
‫Rechts?

153
00:06:26,560 --> 00:06:28,810
‫Also diese Wrapper-Funktion, die uns

154
00:06:28,810 --> 00:06:31,230
‫Zugriff auf diese fünf Variablen gibt.

155
00:06:31,230 --> 00:06:34,710
‫Alles klar, als nächstes möchte ich auch einen Blick auf

156
00:06:34,710 --> 00:06:38,013
‫unsere App-Variable werfen, also im Grunde die Express-Anwendung, die

157
00:06:38,013 --> 00:06:42,330
‫wir aus der App exportieren. js, denk daran.

158
00:06:42,330 --> 00:06:44,870
‫Und hier ist wirklich eine Menge Zeug,

159
00:06:44,870 --> 00:06:47,330
‫aber was ich interessant finde, ist,

160
00:06:47,330 --> 00:06:50,393
‫einen Blick auf diesen Router hier zu werfen.

161
00:06:51,660 --> 00:06:54,763
‫Okay, und im Router haben wir dann Stack.

162
00:06:56,680 --> 00:06:59,100
‫Okay, lassen Sie uns das ein wenig

163
00:07:00,240 --> 00:07:02,070
‫öffnen, und dieser Stack hier

164
00:07:02,070 --> 00:07:05,420
‫ist im Grunde der Middleware-Stack, den wir in unserer Anwendung haben.

165
00:07:05,420 --> 00:07:09,010
‫Okay, zum Beispiel haben wir hier unseren jsonParser,

166
00:07:09,010 --> 00:07:13,030
‫wir haben den Code, der die statischen Dateien bereitstellt.

167
00:07:13,030 --> 00:07:16,760
‫Schau dir das hier in der App an. js so

168
00:07:16,760 --> 00:07:19,170
‫ausdrücken. statisch.

169
00:07:19,170 --> 00:07:21,380
‫Wir haben hier auch den

170
00:07:21,380 --> 00:07:23,910
‫Logger, der hier von Morgan verwendet wird.

171
00:07:23,910 --> 00:07:26,310
‫Dann haben Sie diese beiden nächsten

172
00:07:26,310 --> 00:07:27,480
‫Middleware-Funktionen, also

173
00:07:27,480 --> 00:07:31,590
‫diese beiden hier, die anonym sind, also diese und diese und

174
00:07:31,590 --> 00:07:33,740
‫vielleicht können wir sie uns ansehen.

175
00:07:33,740 --> 00:07:35,803
‫Aber nicht wirklich.

176
00:07:36,640 --> 00:07:38,390
‫Okay, es spielt keine Rolle.

177
00:07:38,390 --> 00:07:40,740
‫Das ist also wirklich nur aus Neugier

178
00:07:40,740 --> 00:07:42,170
‫und zeigt Ihnen, dass

179
00:07:42,170 --> 00:07:45,520
‫wir tatsächlich einen Blick auf unseren Middleware-Stack werfen können, okay?

180
00:07:45,520 --> 00:07:47,603
‫Dann endlich haben wir unsere beiden Router.

181
00:07:48,795 --> 00:07:49,970
‫Okay?

182
00:07:49,970 --> 00:07:53,080
‫Wir haben also den Router, und Sie sehen hier tatsächlich

183
00:07:53,080 --> 00:07:55,160
‫die Route, für die er gilt.

184
00:07:55,160 --> 00:08:00,160
‫Also api/v1/tours richtig und so finde ich das wirklich interessant.

185
00:08:00,980 --> 00:08:03,710
‫Natürlich haben wir auch noch die User hier.

186
00:08:03,710 --> 00:08:07,250
‫Und damit kann man wirklich einen Blick darauf werfen, wie

187
00:08:07,250 --> 00:08:09,823
‫die Express-Anwendung hinter den Kulissen funktioniert.

188
00:08:10,710 --> 00:08:11,543
‫Okay?

189
00:08:12,380 --> 00:08:14,623
‫Also lass uns das alles schließen.

190
00:08:16,140 --> 00:08:18,440
‫Und das andere, was ich Ihnen

191
00:08:18,440 --> 00:08:20,210
‫zeigen wollte, ist hier

192
00:08:21,120 --> 00:08:24,300
‫in den globalen Variablen, denn hier haben wir die

193
00:08:25,850 --> 00:08:28,453
‫Prozessvariable oder sollten sie zumindest hier irgendwo haben.

194
00:08:30,700 --> 00:08:32,910
‫Ja, also hier ist es tatsächlich.

195
00:08:32,910 --> 00:08:35,140
‫Hier haben wir also die Prozessvariable, die

196
00:08:35,140 --> 00:08:37,400
‫man sich merken kann und die überall verfügbar ist.

197
00:08:37,400 --> 00:08:41,070
‫Deshalb wird sie hier als globale Variable bezeichnet.

198
00:08:41,070 --> 00:08:43,310
‫Dann haben wir dort den Prozess. env

199
00:08:44,300 --> 00:08:46,030
‫und denken Sie daran,

200
00:08:46,030 --> 00:08:49,250
‫dass hier alle unsere Umgebungsvariablen gespeichert sind.

201
00:08:49,250 --> 00:08:52,180
‫Hier haben wir also tatsächlich unseren Datenbankstring,

202
00:08:52,180 --> 00:08:55,340
‫die lokale Datenbank, das Passwort und wirklich alle

203
00:08:55,340 --> 00:08:57,910
‫anderen Umgebungsvariablen, die wir in unserer

204
00:08:57,910 --> 00:09:01,333
‫Konfiguration definiert haben. n-Datei.

205
00:09:02,630 --> 00:09:03,740
‫Gut?

206
00:09:03,740 --> 00:09:07,070
‫Also wirklich interessante Sachen, die wir uns hier anschauen können.

207
00:09:07,070 --> 00:09:10,260
‫Aber jetzt fahren wir mit unserem Debugging fort.

208
00:09:10,260 --> 00:09:11,093
‫Okay?

209
00:09:11,093 --> 00:09:13,540
‫Also haben wir den Code gestoppt, wir haben

210
00:09:13,540 --> 00:09:16,630
‫ihn hier an dieser Stelle, also in Zeile 21, rechtzeitig eingefroren.

211
00:09:16,630 --> 00:09:19,720
‫Okay, und jetzt können wir hier auf diese Schaltfläche

212
00:09:19,720 --> 00:09:22,400
‫klicken, um den Code tatsächlich weiter auszuführen.

213
00:09:22,400 --> 00:09:24,210
‫Und da wir keine Breakpoints

214
00:09:24,210 --> 00:09:26,070
‫mehr haben, wird der Code dann nicht

215
00:09:26,070 --> 00:09:28,500
‫mehr brechen und im Grunde die Ausführung beenden.

216
00:09:28,500 --> 00:09:29,980
‫Also machen wir das.

217
00:09:29,980 --> 00:09:32,910
‫Und jetzt läuft unsere Anwendung wirklich.

218
00:09:32,910 --> 00:09:33,830
‫Schauen wir uns das an.

219
00:09:33,830 --> 00:09:36,600
‫In der Konsole, okay?

220
00:09:36,600 --> 00:09:38,720
‫Also App läuft auf Port 3.000

221
00:09:38,720 --> 00:09:40,793
‫und DB-Verbindung natürlich erfolgreich.

222
00:09:43,550 --> 00:09:44,793
‫Was ist hier passiert?

223
00:09:46,120 --> 00:09:47,350
‫Nun gut, also

224
00:09:47,350 --> 00:09:50,163
‫lass uns jetzt schnell eine Anfrage hier stellen.

225
00:09:51,580 --> 00:09:53,650
‫Also einfach eine für /tours und jetzt

226
00:09:55,532 --> 00:09:57,100
‫haben wir den ganzen

227
00:09:57,100 --> 00:09:59,683
‫Kram hier und ich werde mich gleich darum kümmern.

228
00:10:01,050 --> 00:10:04,110
‫In Ordnung, und wenn Sie jetzt hier zu unserer

229
00:10:04,110 --> 00:10:07,670
‫Konsole zurückkehren, haben wir natürlich den gesamten Code, den wir zuvor hatten.

230
00:10:07,670 --> 00:10:09,220
‫Hallo von der Middleware

231
00:10:09,220 --> 00:10:12,120
‫und dann wie lange die Abfrage eigentlich gedauert hat.

232
00:10:12,120 --> 00:10:14,890
‫Alles klar, und bevor wir noch

233
00:10:14,890 --> 00:10:17,693
‫etwas tun, sollten wir diese Junk-Touren tatsächlich loswerden.

234
00:10:19,380 --> 00:10:20,893
‫Also werde ich es hier neu

235
00:10:22,270 --> 00:10:24,720
‫laden, und ich denke, es wird irgendwo hier am Ende sein.

236
00:10:26,720 --> 00:10:29,103
‫Also, teste was auch immer hier.

237
00:10:29,980 --> 00:10:31,593
‫Also lass es uns loswerden.

238
00:10:32,490 --> 00:10:35,573
‫Dies ist die geheime Tour und ich möchte sie eigentlich hier behalten.

239
00:10:37,480 --> 00:10:40,413
‫Aber alles ab jetzt wollen wir nicht mehr.

240
00:10:44,720 --> 00:10:45,830
‫Und so

241
00:10:48,150 --> 00:10:51,490
‫so ja, jetzt haben wir wieder nur 10

242
00:10:51,490 --> 00:10:53,480
‫Touren, genau wie zuvor.

243
00:10:53,480 --> 00:10:55,860
‫Wie auch immer, setzen wir nun tatsächlich einen Breakpoint

244
00:10:55,860 --> 00:10:58,203
‫in der Funktion, die diese Route verarbeitet.

245
00:10:59,060 --> 00:11:02,150
‫Okay, und so kommen wir zu unserem Controller-Ordner

246
00:11:02,150 --> 00:11:04,540
‫und dort haben wir den Tour-Controller.

247
00:11:04,540 --> 00:11:05,373
‫Okay?

248
00:11:05,373 --> 00:11:08,200
‫Und dann ist die Handler-Funktion dies, um alle Touren zu erhalten.

249
00:11:08,200 --> 00:11:09,760
‫Im Moment wollte

250
00:11:09,760 --> 00:11:11,960
‫ich nur einen Breakpoint hier setzen,

251
00:11:11,960 --> 00:11:15,010
‫damit wir uns ansehen können, wie diese Variablen

252
00:11:15,010 --> 00:11:17,710
‫aussehen, nachdem die Abfrage bereits abgeschlossen ist.

253
00:11:17,710 --> 00:11:20,430
‫Dieser Code hier wird also unsere Touren erhalten und

254
00:11:20,430 --> 00:11:21,900
‫wir werden den Code

255
00:11:21,900 --> 00:11:25,210
‫dann im Grunde stoppen, bevor wir ihn tatsächlich als Antwort senden.

256
00:11:25,210 --> 00:11:29,790
‫Okay, und wir müssen also nur die Anfrage ausführen, da

257
00:11:29,790 --> 00:11:32,730
‫dies dann diese Funktion auslöst.

258
00:11:32,730 --> 00:11:33,600
‫Rechts?

259
00:11:33,600 --> 00:11:36,550
‫Da wir also einen Unterbrechungspunkt haben, kehren wir automatisch zu

260
00:11:36,550 --> 00:11:39,440
‫diesem Fenster hier zurück und zu dem Punkt, an

261
00:11:39,440 --> 00:11:41,270
‫dem der Code aufgehört hat.

262
00:11:41,270 --> 00:11:43,713
‫Also, was für Variablen haben wir hier?

263
00:11:44,830 --> 00:11:47,690
‫Sie sehen also, dass wir die Anfrage und eine Antwort

264
00:11:47,690 --> 00:11:49,630
‫haben, und wir haben auch

265
00:11:49,630 --> 00:11:51,670
‫die Funktionen variabel und natürlich die Touren.

266
00:11:51,670 --> 00:11:53,770
‫Schauen wir uns also zunächst die Anfrage an.

267
00:11:54,740 --> 00:11:57,500
‫Und hier sieht man wieder, dass wir wirklich alle

268
00:11:57,500 --> 00:11:58,560
‫möglichen Sachen haben.

269
00:11:58,560 --> 00:12:02,470
‫Wir haben also baseurl, wir haben die Methode, wir haben

270
00:12:02,470 --> 00:12:05,150
‫zum Beispiel Request. query, die im Moment

271
00:12:05,150 --> 00:12:07,280
‫leer ist, weil wir keine Abfragezeichenfolge

272
00:12:07,280 --> 00:12:08,560
‫übergeben haben, aber

273
00:12:08,560 --> 00:12:11,170
‫Sie sehen, dass sie wirklich schon da ist.

274
00:12:11,170 --> 00:12:13,730
‫Okay, und jetzt sehen Sie, wie

275
00:12:13,730 --> 00:12:16,810
‫praktisch dies sein kann, um unseren Code zu debuggen.

276
00:12:16,810 --> 00:12:20,060
‫Im Grunde also, um unseren Code rechtzeitig einzufrieren, anstatt all

277
00:12:20,060 --> 00:12:23,620
‫diese Konsolen ausführen zu müssen. Protokolle, die wir bis zu diesem

278
00:12:23,620 --> 00:12:25,040
‫Zeitpunkt gemacht haben.

279
00:12:25,040 --> 00:12:27,770
‫Wenn wir uns zum Beispiel die Abfrage ansehen wollten, machten wir

280
00:12:27,770 --> 00:12:31,010
‫normalerweise eine Reihe von Konsolen. logs und verwenden Sie

281
00:12:31,010 --> 00:12:34,590
‫diese, um einen Fehler zu finden, falls etwas

282
00:12:34,590 --> 00:12:35,950
‫nicht funktioniert.

283
00:12:35,950 --> 00:12:38,150
‫Richtig, aber jetzt haben wir dieses erstaunliche Tool, das uns helfen

284
00:12:38,150 --> 00:12:41,130
‫kann, all diese Konsolen zu vermeiden. Protokolle zum

285
00:12:41,130 --> 00:12:42,460
‫Beispiel.

286
00:12:42,460 --> 00:12:44,530
‫Dann haben wir natürlich auch die Antwort.

287
00:12:44,530 --> 00:12:48,460
‫Und wieder sehen Sie all diese Eigenschaften und Methoden, die da drin

288
00:12:48,460 --> 00:12:50,890
‫sind und die für uns jetzt nicht

289
00:12:50,890 --> 00:12:51,990
‫wirklich interessant sind.

290
00:12:51,990 --> 00:12:54,900
‫Was ich euch zeigen wollte ist natürlich, dass wir

291
00:12:54,900 --> 00:12:57,520
‫zu diesem Zeitpunkt schon die Touren haben, okay?

292
00:12:57,520 --> 00:13:02,450
‫Wir haben also neun Touren, also schauen wir sie uns an.

293
00:13:02,450 --> 00:13:06,000
‫Und es sieht hier irgendwie seltsam aus, also müssen wir hier

294
00:13:06,000 --> 00:13:10,480
‫klicken, um Zugang zu den tatsächlichen Werten zu erhalten, okay, das ist also

295
00:13:10,480 --> 00:13:11,880
‫ein bisschen seltsam.

296
00:13:11,880 --> 00:13:14,037
‫Aber es funktioniert natürlich.

297
00:13:14,037 --> 00:13:18,110
‫Und so sehen Sie, dass unsere Touren tatsächlich schon da

298
00:13:18,110 --> 00:13:21,093
‫sind und natürlich auch die Features.

299
00:13:21,930 --> 00:13:24,650
‫Sie sehen hier also, dass die Features eine

300
00:13:24,650 --> 00:13:27,670
‫Instanz der API-Feature-Klasse sind, so wie wir sie definiert haben.

301
00:13:27,670 --> 00:13:31,130
‫Und dort haben wir die Abfrage und den Abfragestring.

302
00:13:31,130 --> 00:13:34,660
‫Großartig, also sehen wir uns alle Variablen an.

303
00:13:34,660 --> 00:13:37,087
‫Und so funktionieren die wichtigsten

304
00:13:37,087 --> 00:13:38,680
‫Teile des Debuggers.

305
00:13:38,680 --> 00:13:41,750
‫Um nun ein wenig über den Debugging-Prozess selbst zu lernen,

306
00:13:41,750 --> 00:13:45,400
‫führen wir einen sehr kleinen Fehler in unseren Code ein und werfen

307
00:13:45,400 --> 00:13:48,300
‫dann einen Blick darauf, wie wir diese Tools verwenden

308
00:13:48,300 --> 00:13:51,280
‫können, die wir hier haben, um unseren Code im

309
00:13:51,280 --> 00:13:52,790
‫Grunde genauer zu betrachten.

310
00:13:52,790 --> 00:13:55,410
‫Also werde ich die übersprungene Ausführung

311
00:13:55,410 --> 00:13:59,850
‫nicht fortsetzen, um im Grunde den Rest des Codes auszuführen, okay?

312
00:13:59,850 --> 00:14:01,270
‫Das sollte also jetzt geschehen.

313
00:14:01,270 --> 00:14:03,670
‫Hier haben wir nun alle Antworten.

314
00:14:03,670 --> 00:14:06,320
‫Sie sehen also, dass es hier die ganze Zeit gedauert

315
00:14:06,320 --> 00:14:08,970
‫hat, also drei Minuten und 29 Sekunden, aber das

316
00:14:08,970 --> 00:14:11,410
‫liegt nur daran, dass wir die Hinrichtung so lange

317
00:14:11,410 --> 00:14:12,313
‫unterbrochen haben.

318
00:14:14,130 --> 00:14:15,130
‫Okay.

319
00:14:15,130 --> 00:14:17,793
‫Kommen wir nun zu unserem Code hier.

320
00:14:19,160 --> 00:14:21,853
‫Schließen wir, was wir nicht mehr brauchen.

321
00:14:23,810 --> 00:14:28,410
‫Eigentlich möchte ich in unserer API-Features-Datei hier einen

322
00:14:28,410 --> 00:14:32,603
‫kleinen Fehler in den Limit-Feldern einführen.

323
00:14:33,570 --> 00:14:36,080
‫Nehmen wir an, wir haben versucht, diese Methode hier

324
00:14:36,080 --> 00:14:39,340
‫zu implementieren, aber anstatt sie hier mit einem Leerzeichen zu verbinden,

325
00:14:39,340 --> 00:14:41,790
‫haben wir vergessen, sie hier zu platzieren.

326
00:14:41,790 --> 00:14:45,030
‫Also sagen wir einfach, dass wir ohne Leerzeichen

327
00:14:45,030 --> 00:14:49,010
‫beigetreten sind, und das würde uns dann ein seltsames Ergebnis liefern, oder?

328
00:14:49,010 --> 00:14:50,633
‫Also lass es uns mal testen.

329
00:14:52,650 --> 00:14:54,480
‫Sagen wir

330
00:14:56,350 --> 00:14:59,690
‫also Felder und wir wollten

331
00:14:59,690 --> 00:15:04,050
‫nur den Namen und die Dauer, oder?

332
00:15:04,050 --> 00:15:07,400
‫Bevor ich diese Anfrage tatsächlich senden kann, entfernen wir

333
00:15:07,400 --> 00:15:09,050
‫den Haltepunkt hier.

334
00:15:10,650 --> 00:15:11,483
‫Okay?

335
00:15:11,483 --> 00:15:14,410
‫Die Anfrage wurde gesendet, und jetzt erhalten wir tatsächlich den

336
00:15:14,410 --> 00:15:16,073
‫Namen und die Dauer nicht.

337
00:15:16,920 --> 00:15:19,410
‫Nehmen wir also an, das wäre

338
00:15:19,410 --> 00:15:23,510
‫jetzt unser Fehler und wir versuchen jetzt herauszufinden, warum das nicht funktioniert.

339
00:15:23,510 --> 00:15:24,520
‫Okay?

340
00:15:24,520 --> 00:15:26,490
‫Kommen wir also zu unserem Debugger.

341
00:15:26,490 --> 00:15:28,470
‫Und wir wissen, dass der

342
00:15:28,470 --> 00:15:31,053
‫Fehler wahrscheinlich irgendwo in unserer Grenzwertfeldmethode liegen muss.

343
00:15:32,090 --> 00:15:35,530
‫Also lassen Sie uns an dieser Stelle im Grunde die

344
00:15:35,530 --> 00:15:37,320
‫Ausführung des Codes stoppen, okay?

345
00:15:37,320 --> 00:15:40,880
‫Da diese Methode hier tatsächlich aufgerufen wird, können wir

346
00:15:40,880 --> 00:15:43,927
‫von hier aus diese Funktion für diese

347
00:15:43,927 --> 00:15:45,130
‫Methode eingeben.

348
00:15:45,130 --> 00:15:46,100
‫Okay?

349
00:15:46,100 --> 00:15:48,883
‫Lassen Sie uns diese Anfrage jetzt

350
00:15:50,240 --> 00:15:54,240
‫abfeuern, und jetzt kehren wir automatisch zu unserem Debugger zurück.

351
00:15:54,240 --> 00:15:57,250
‫An diesem Punkt wurden diese Zeile und diese

352
00:15:57,250 --> 00:16:00,880
‫Zeile und diese Codezeile bereits ausgeführt, und jetzt verwenden

353
00:16:00,880 --> 00:16:02,980
‫wir das Step-Tool, okay?

354
00:16:02,980 --> 00:16:05,770
‫Der Schritt führt dazu, dass im Grunde die

355
00:16:05,770 --> 00:16:07,430
‫nächste Codezeile ausgeführt wird.

356
00:16:07,430 --> 00:16:09,810
‫Und in diesem Fall befindet sich das

357
00:16:09,810 --> 00:16:11,790
‫innerhalb der Methode limit field.

358
00:16:11,790 --> 00:16:16,143
‫Also Schritt, und es wird dann direkt in diese Funktion übergehen.

359
00:16:17,000 --> 00:16:20,670
‫Okay, schauen wir uns an, was wir hier haben.

360
00:16:20,670 --> 00:16:24,070
‫Zum Beispiel dies. Abfragezeichenfolge ist Name Kommadauer,

361
00:16:24,070 --> 00:16:26,083
‫das ist also richtig, oder?

362
00:16:26,990 --> 00:16:30,520
‫Okay, also gehen wir zur nächsten Zeile.

363
00:16:30,520 --> 00:16:33,600
‫In Ordnung, und hier findet diese

364
00:16:33,600 --> 00:16:35,263
‫Operation tatsächlich statt.

365
00:16:36,440 --> 00:16:38,460
‫Dann als nächstes.

366
00:16:38,460 --> 00:16:40,823
‫Schauen wir uns hier unsere Variablen an.

367
00:16:42,500 --> 00:16:47,090
‫Und hier sehen wir jetzt ein Feld, und hier haben wir unseren Fehler.

368
00:16:47,090 --> 00:16:47,930
‫Okay?

369
00:16:47,930 --> 00:16:50,810
‫Das Problem ist also natürlich, dass zwischen Name

370
00:16:50,810 --> 00:16:53,170
‫und Dauer kein Leerzeichen steht.

371
00:16:53,170 --> 00:16:54,830
‫Und deshalb funktioniert es nicht.

372
00:16:54,830 --> 00:16:58,410
‫Felder sind hier natürlich definiert, und so

373
00:16:58,410 --> 00:17:02,500
‫können wir unseren Fehler sofort finden und korrigieren.

374
00:17:02,500 --> 00:17:04,940
‫Denken Sie also daran, dass sich der

375
00:17:04,940 --> 00:17:07,780
‫hinzugefügte Schritt, den wir hier ausführen, sofort im Code widerspiegelt.

376
00:17:07,780 --> 00:17:08,823
‫Also speichern

377
00:17:09,700 --> 00:17:12,560
‫Sie es und dann wird es wieder tun.

378
00:17:12,560 --> 00:17:14,233
‫So kann ich weitergehen.

379
00:17:15,140 --> 00:17:17,270
‫Und so ist jetzt Felder richtig.

380
00:17:17,270 --> 00:17:19,193
‫Also Namensraumdauer.

381
00:17:20,780 --> 00:17:22,670
‫Dann die nächste Codezeile.

382
00:17:22,670 --> 00:17:26,330
‫Und jetzt geben wir die Methode select für die Abfrage ein.

383
00:17:26,330 --> 00:17:28,420
‫Aber das interessiert uns überhaupt nicht, also können wir

384
00:17:28,420 --> 00:17:32,543
‫sagen: "Aus der aktuellen Funktion aussteigen. " Okay?

385
00:17:32,543 --> 00:17:35,730
‫Also diese Auswahl, von der wir dachten, dass sie

386
00:17:35,730 --> 00:17:37,880
‫diese Funktion hier ausführt, okay?

387
00:17:37,880 --> 00:17:40,150
‫Aber das interessierte uns natürlich nicht, also

388
00:17:40,150 --> 00:17:43,080
‫haben wir es einfach aufgegeben und sind zur nächsten Zeile übergegangen.

389
00:17:43,080 --> 00:17:44,950
‫Jetzt haben wir

390
00:17:44,950 --> 00:17:48,330
‫dies, die nächste Zeile und noch einmal zurück.

391
00:17:48,330 --> 00:17:51,373
‫Jetzt sind wir also wieder da, wo wir waren, aber in der nächsten Zeile.

392
00:17:52,590 --> 00:17:53,840
‫Machen wir also weiter.

393
00:17:55,040 --> 00:17:56,750
‫Jetzt sind wir also bei

394
00:17:56,750 --> 00:17:59,060
‫Seite acht, aber diese interessiert uns nicht

395
00:17:59,060 --> 00:18:01,660
‫wirklich, und so verlassen wir die aktuelle Funktion wieder.

396
00:18:02,950 --> 00:18:05,190
‫Und jetzt sind wir hier bei der Tourendefinition.

397
00:18:05,190 --> 00:18:07,840
‫Was an dieser Stelle noch nicht fertig ist.

398
00:18:07,840 --> 00:18:10,610
‫Sagen wir also noch einmal Schritt.

399
00:18:10,610 --> 00:18:14,070
‫Und so sollten jetzt an dieser Stelle unsere Touren definiert werden.

400
00:18:14,070 --> 00:18:17,950
‫Also gut, wir haben unsere neun Touren hier drüben.

401
00:18:17,950 --> 00:18:19,250
‫Werfen wir einen Blick auf sie,

402
00:18:20,590 --> 00:18:21,810
‫und hier sind sie.

403
00:18:21,810 --> 00:18:23,670
‫Und tatsächlich haben sie alle

404
00:18:23,670 --> 00:18:26,880
‫Daten, also nicht nur die, die wir definiert haben,

405
00:18:26,880 --> 00:18:28,560
‫sondern tatsächlich nicht.

406
00:18:28,560 --> 00:18:32,220
‫Wir haben also wirklich nur den Namen und

407
00:18:32,220 --> 00:18:35,490
‫die Dauer, also sind Dauer, Name und

408
00:18:35,490 --> 00:18:36,980
‫alle anderen undefiniert.

409
00:18:36,980 --> 00:18:40,010
‫Das liegt also nur daran, dass wir eine Abfrage auf nur diese beiden

410
00:18:40,010 --> 00:18:41,603
‫Felder beschränkt haben, erinnern Sie sich?

411
00:18:42,500 --> 00:18:45,350
‫Was ich Ihnen jetzt auch zeigen wollte, ist hier

412
00:18:45,350 --> 00:18:49,370
‫in den Funktionen, wir können uns unsere Abfrage ansehen und hier haben wir zum

413
00:18:49,370 --> 00:18:52,240
‫Beispiel die Felder-Eigenschaft, bei der wir die Dauer auf eins

414
00:18:52,240 --> 00:18:54,780
‫und den Namen auf eins gesetzt sehen.

415
00:18:54,780 --> 00:18:58,300
‫Und das sind genau die beiden Namen, die wir ausgewählt haben.

416
00:18:58,300 --> 00:19:00,420
‫Wir haben auch diese Optionen

417
00:19:00,420 --> 00:19:05,420
‫hier, die an dieser Stelle so eingestellt sind, dass sie minus eins erstellt werden.

418
00:19:05,690 --> 00:19:07,393
‫Und das kommt also von hier.

419
00:19:08,560 --> 00:19:10,500
‫Also das hier.

420
00:19:10,500 --> 00:19:13,360
‫Im Grunde genommen wird diese Methode

421
00:19:13,360 --> 00:19:17,350
‫hier, diese Sortiermethode, diese Sortiereigenschaft hier zu diesen Optionen

422
00:19:17,350 --> 00:19:18,860
‫hinzufügen, in Ordnung?

423
00:19:18,860 --> 00:19:22,110
‫Und dann haben wir auch noch Limit und Skip, die hier

424
00:19:22,110 --> 00:19:23,763
‫natürlich ab Seite 8 kommen.

425
00:19:25,690 --> 00:19:26,523
‫Okay?

426
00:19:26,523 --> 00:19:29,160
‫Also dachte ich, dass das auch irgendwie

427
00:19:29,160 --> 00:19:33,880
‫interessant ist und ja, unser Code ist jetzt tatsächlich behoben und lass uns das

428
00:19:33,880 --> 00:19:34,713
‫weiterlaufen lassen.

429
00:19:35,550 --> 00:19:38,630
‫Und so sollten wir jetzt unser korrektes Ergebnis haben.

430
00:19:38,630 --> 00:19:41,510
‫Hier heißt es nun, wir konnten keine Antwort erhalten, und das

431
00:19:41,510 --> 00:19:44,593
‫liegt daran, dass wir zu lange gebraucht haben, um unseren Code zu reparieren.

432
00:19:45,490 --> 00:19:47,280
‫Wir haben also einen Fehler beim Verbinden erhalten.

433
00:19:47,280 --> 00:19:48,693
‫Aber wenn wir es jetzt noch

434
00:19:49,530 --> 00:19:51,050
‫einmal schicken, und jetzt machen wir es schneller.

435
00:19:51,050 --> 00:19:53,650
‫Oder wir könnten unseren Breakpoint ganz entfernen.

436
00:19:55,280 --> 00:19:56,780
‫Also lassen Sie uns

437
00:19:56,780 --> 00:19:59,570
‫weiterlaufen, gehen wir zurück und jetzt bekommen wir tatsächlich

438
00:19:59,570 --> 00:20:01,570
‫auch die Dauer und den Namen.

439
00:20:01,570 --> 00:20:04,260
‫Das liegt daran, dass wir gerade unseren Code

440
00:20:04,260 --> 00:20:06,550
‫mit dem NDB-Debugger korrigiert haben.

441
00:20:06,550 --> 00:20:07,990
‫So großartig.

442
00:20:07,990 --> 00:20:10,840
‫Das ist ein wirklich erstaunliches und hilfreiches Werkzeug,

443
00:20:10,840 --> 00:20:13,260
‫das wir für den Rest des Kurses

444
00:20:13,260 --> 00:20:14,220
‫verwenden werden.

445
00:20:14,220 --> 00:20:17,530
‫Vielleicht nicht immer, manchmal ist es schneller,

446
00:20:17,530 --> 00:20:19,540
‫einfach ein Konsolen-Log einzufügen.

447
00:20:19,540 --> 00:20:22,350
‫Aber in einigen komplizierteren Fällen verwende ich diese

448
00:20:22,350 --> 00:20:24,253
‫Art von Werkzeug wirklich gerne.

