﻿1
00:00:01,260 --> 00:00:02,700
‫Kursleiter: Willkommen zurück.

2
00:00:02,700 --> 00:00:06,280
‫Ich hoffe also, dass Ihnen dieser Abschnitt bis jetzt gefällt und

3
00:00:06,280 --> 00:00:09,800
‫Sie gerne mit Node. js.

4
00:00:09,800 --> 00:00:13,100
‫Lassen Sie uns nun in

5
00:00:13,100 --> 00:00:17,573
‫unserem Projekt weitermachen und eine extrem einfache Web-API erstellen.

6
00:00:19,430 --> 00:00:23,290
‫Nun, um zu beginnen, was ist eigentlich eine API?

7
00:00:23,290 --> 00:00:25,759
‫Nun, die lange Antwort werden

8
00:00:25,759 --> 00:00:30,450
‫Sie in einem der nächsten Abschnitte lernen, aber vorerst die kurze Antwort,

9
00:00:30,450 --> 00:00:34,510
‫zumindest in diesem Kontext von Web-APIs, im Grunde ist eine

10
00:00:34,510 --> 00:00:39,510
‫API ein Dienst, von dem wir einige Daten anfordern können, In diesem Fall

11
00:00:39,750 --> 00:00:43,880
‫handelt es sich also bei den Daten, die der Benutzer anfordern

12
00:00:43,880 --> 00:00:46,470
‫möchte, um Daten zu den Produkten, die

13
00:00:46,470 --> 00:00:50,070
‫wir in dieser Knotenfarm, also in diesem Projekt, anbieten.

14
00:00:50,070 --> 00:00:54,360
‫Also habe ich hier diesen dev-data-Ordner, und darin habe ich eine

15
00:00:54,360 --> 00:00:58,870
‫JSON-Datei, und JSON, falls Sie es nicht wissen, ist ein sehr einfaches

16
00:00:58,870 --> 00:01:01,500
‫Textformat, das einem JavaScript-Objekt sehr ähnlich

17
00:01:01,500 --> 00:01:04,250
‫sieht, also sieht es so aus ,

18
00:01:04,250 --> 00:01:07,720
‫und wir können Arrays haben, die wir tatsächlich

19
00:01:07,720 --> 00:01:11,010
‫haben, also haben wir ein großes Array, das

20
00:01:11,010 --> 00:01:14,630
‫dann diese fünf Objekte enthält, und jedes Objekt hat

21
00:01:14,630 --> 00:01:18,400
‫dann die ID, den Produktnamen, das Bild und so weiter

22
00:01:18,400 --> 00:01:20,160
‫und so weiter.

23
00:01:20,160 --> 00:01:24,270
‫Jetzt muss jeder von diesen eine Zeichenfolge für jeden der Schlüssel sein,

24
00:01:24,270 --> 00:01:26,593
‫und dann haben wir den Wert.

25
00:01:29,828 --> 00:01:34,010
‫Im Grunde sind diese Daten also das, was unsere API

26
00:01:34,010 --> 00:01:36,673
‫auf Anfrage an den Client sendet.

27
00:01:37,840 --> 00:01:40,763
‫Also werden wir hier noch eine andere Route haben.

28
00:01:43,250 --> 00:01:48,250
‫Also genau hier, sonst, wenn der Pfadname gleich /api ist.

29
00:01:55,980 --> 00:01:59,580
‫Und vorerst senden wir als Platzhalter die API

30
00:02:04,070 --> 00:02:05,703
‫einfach so zurück.

31
00:02:08,520 --> 00:02:12,750
‫Was wir jetzt also tun möchten, ist, die Daten aus dieser

32
00:02:12,750 --> 00:02:17,500
‫Datei hier tatsächlich zu lesen, dann JSON in JavaScript zu parsen und

33
00:02:17,500 --> 00:02:20,520
‫dann dieses Ergebnis an den Client zurückzusenden.

34
00:02:20,520 --> 00:02:24,053
‫Also etwas ganz Einfaches und los geht's.

35
00:02:26,430 --> 00:02:29,350
‫Der erste Ansatz hierfür besteht

36
00:02:29,350 --> 00:02:33,400
‫also darin, in diese Route einzusteigen und dann die

37
00:02:33,400 --> 00:02:36,350
‫Datei hier mit der Dateilesefunktion einzulesen, richtig?

38
00:02:36,350 --> 00:02:37,853
‫Beginnen wir also damit.

39
00:02:40,110 --> 00:02:44,393
‫Also FS. , und es ist tatsächlich

40
00:02:46,287 --> 00:02:50,110
‫readFile, nicht fileRead, also readFile und dann der Name der Datei.

41
00:02:50,110 --> 00:02:52,593
‫Denken Sie daran, wie ich Ihnen vorhin

42
00:02:52,593 --> 00:02:56,260
‫gesagt habe, dass dies nicht die einzige Möglichkeit ist, unsere

43
00:02:56,260 --> 00:02:58,223
‫Datei im Dateisystem zu finden.

44
00:02:59,300 --> 00:03:01,460
‫Lassen Sie es uns jetzt tatsächlich noch verwenden, aber

45
00:03:01,460 --> 00:03:03,510
‫nachdem wir es hier geschrieben haben, zeige ich

46
00:03:03,510 --> 00:03:04,910
‫Ihnen einen anderen Weg.

47
00:03:05,790 --> 00:03:10,790
‫Also, ein Hinweis, dieser Punkt hier bezieht sich tatsächlich auf das Verzeichnis, von

48
00:03:11,260 --> 00:03:14,633
‫dem aus wir den Knoten-Befehl im Terminal ausführen.

49
00:03:15,740 --> 00:03:18,420
‫Also noch einmal, dieser Punkt

50
00:03:18,420 --> 00:03:21,414
‫hier stellt jetzt diesen aktuellen Ordner hier dar,

51
00:03:21,414 --> 00:03:25,800
‫weil wir dort tatsächlich den node-Befehl ausführen, also in diesem 1-node-farm-Ordner, der

52
00:03:25,800 --> 00:03:28,600
‫in diesem Fall sowieso unser aktuelles Arbeitsverzeichnis

53
00:03:28,600 --> 00:03:32,270
‫ist, aber wir hätten es tun können Führen Sie den

54
00:03:32,270 --> 00:03:35,230
‫Befehl node an einer anderen Stelle aus,

55
00:03:35,230 --> 00:03:38,260
‫und dann würde der Punkt etwas anderes bedeuten.

56
00:03:38,260 --> 00:03:42,860
‫So könnten wir zum Beispiel perfekt finden, zum Desktop gehen und

57
00:03:42,860 --> 00:03:46,380
‫dort den Knoten ausführen und dann den gesamten

58
00:03:46,380 --> 00:03:50,600
‫Pfad zum Index angeben. js, aber das könnten wir machen,

59
00:03:50,600 --> 00:03:55,080
‫aber in diesem Fall würde der Punkt den Desktop bedeuten. Wenn wir also das

60
00:03:55,080 --> 00:03:57,390
‫Skript vom Desktop aus starten, dann würde

61
00:03:57,390 --> 00:03:59,890
‫dieser hier, dieser Punkt, den Desktop bedeuten,

62
00:03:59,890 --> 00:04:03,200
‫und das ist also nicht immer ideal , und daher

63
00:04:03,200 --> 00:04:05,290
‫gibt es einen besseren Weg.

64
00:04:05,290 --> 00:04:08,230
‫Also alle Node. js-Skripts erhalten

65
00:04:08,230 --> 00:04:12,790
‫sie Zugriff auf eine Variable namens dirname, und diese

66
00:04:12,790 --> 00:04:17,200
‫Variable wird immer in das Verzeichnis übersetzt, in dem

67
00:04:17,200 --> 00:04:21,078
‫sich das Skript befindet, das wir gerade ausführen.

68
00:04:21,078 --> 00:04:24,170
‫In diesem Fall ist es also tatsächlich

69
00:04:24,170 --> 00:04:28,410
‫derselbe Ort, weil index. js befindet

70
00:04:28,410 --> 00:04:31,980
‫sich auch in diesem Node-Farm-Ordner, aber

71
00:04:31,980 --> 00:04:34,280
‫aus den oben genannten

72
00:04:34,280 --> 00:04:38,670
‫Gründen ist es oft besser, die dirname-Variable

73
00:04:38,670 --> 00:04:41,343
‫zu verwenden wir verwenden

74
00:04:44,400 --> 00:04:46,690
‫die Variable, also

75
00:04:46,690 --> 00:04:51,567
‫ist es __dirname, was für den Verzeichnisnamen steht.

76
00:04:54,870 --> 00:04:57,870
‫Und normalerweise machen wir es so.

77
00:04:57,870 --> 00:04:59,850
‫Jetzt gibt es eine Ausnahme

78
00:04:59,850 --> 00:05:01,963
‫von dieser Regel, nämlich die Funktion require.

79
00:05:03,224 --> 00:05:05,140
‫Wenn wir also Module

80
00:05:05,140 --> 00:05:08,160
‫benötigen, können wir tatsächlich unsere eigenen Module benötigen, und

81
00:05:08,160 --> 00:05:10,650
‫das werden wir etwas später tun, wie

82
00:05:10,650 --> 00:05:13,800
‫im nächsten oder einem der beiden nächsten Videos, und

83
00:05:13,800 --> 00:05:18,200
‫dort bedeutet der Punkt tatsächlich auch die aktuelle Arbeitsweise Verzeichnis und nicht der

84
00:05:18,200 --> 00:05:20,863
‫Ort, von dem aus wir das Skript ausführen.

85
00:05:21,965 --> 00:05:25,270
‫Denken Sie also daran, dass die require-Funktion eine Ausnahme

86
00:05:25,270 --> 00:05:27,780
‫von dieser Regel darstellt, aber normalerweise ist

87
00:05:27,780 --> 00:05:30,050
‫der Punkt, wo das Skript

88
00:05:30,050 --> 00:05:35,050
‫ausgeführt wird, und __dirname ist der Ort, an dem sich die aktuelle Datei befindet.

89
00:05:37,920 --> 00:05:42,920
‫Nun gut, jetzt wollen wir die utf-8-Dateicodierung angeben und dann

90
00:05:43,840 --> 00:05:48,840
‫unsere Callback-Funktion, die zuerst der Fehler ist, denken Sie daran,

91
00:05:49,900 --> 00:05:54,900
‫und so haben wir jetzt Zugriff auf diese Daten.

92
00:05:56,700 --> 00:05:59,920
‫Jetzt sind die Daten in JSON, und in JavaScript haben wir

93
00:05:59,920 --> 00:06:04,023
‫etwas eingebaut, das JSON genannt wird. analysieren.

94
00:06:06,290 --> 00:06:08,600
‫Dies nimmt also den JSON-Code,

95
00:06:08,600 --> 00:06:10,190
‫der eigentlich ein

96
00:06:10,190 --> 00:06:14,400
‫String ist, und wandelt ihn dann automatisch in JavaScript um,

97
00:06:14,400 --> 00:06:17,593
‫in diesem Fall also ein JavaScript-Objekt oder -Array.

98
00:06:19,240 --> 00:06:21,117
‫Nennen wir dies einmal productData,

99
00:06:23,857 --> 00:06:26,743
‫und werfen dann auch noch schnell einen Blick darauf.

100
00:06:32,500 --> 00:06:34,853
‫Also in diesem Fall in der Konsole.

101
00:06:36,520 --> 00:06:40,740
‫Also, starten Sie den Server neu und vergessen Sie

102
00:06:40,740 --> 00:06:45,740
‫jetzt nicht, die /api-Route zu wählen, und oh, was passiert hier?

103
00:06:47,520 --> 00:06:49,470
‫Oh, wir haben den Server tatsächlich neu gestartet.

104
00:06:52,545 --> 00:06:54,397
‫Und so bekommen wir

105
00:06:55,330 --> 00:06:58,020
‫jetzt eine Antwort-API und werfen wir

106
00:06:58,020 --> 00:07:01,140
‫nun einen Blick hier auf das Produktdatenobjekt.

107
00:07:01,140 --> 00:07:04,340
‫Dies ist also nur ein schönes Objekt mit all den

108
00:07:04,340 --> 00:07:09,340
‫Daten, die wir in diesen Daten hatten. json-Datei.

109
00:07:09,620 --> 00:07:13,450
‫Alles klar, nun besteht der nächste Schritt darin, diese

110
00:07:13,450 --> 00:07:16,653
‫Daten dann tatsächlich als Antwort zurückzusenden.

111
00:07:17,640 --> 00:07:20,180
‫Nun diese Antwort. Die end-Methode

112
00:07:20,180 --> 00:07:24,953
‫muss hier tatsächlich einen String zurücksenden und hier kein Objekt.

113
00:07:25,890 --> 00:07:28,510
‫Was wir also tatsächlich zurücksenden möchten, sind

114
00:07:28,510 --> 00:07:33,230
‫die Daten direkt, also sind Daten eine Zeichenfolge, die wir dann mit JSON

115
00:07:33,230 --> 00:07:37,410
‫in ein Objekt umgewandelt haben. parse, aber für den

116
00:07:37,410 --> 00:07:41,730
‫Moment hätten wir das eigentlich nicht nötig, aber ich habe es

117
00:07:41,730 --> 00:07:44,445
‫trotzdem gemacht, weil wir das später brauchen

118
00:07:44,445 --> 00:07:48,130
‫werden, wenn wir mit dem Erstellen unserer HTML-Vorlagen beginnen.

119
00:07:48,130 --> 00:07:50,710
‫Dann benötigen wir diese Daten

120
00:07:50,710 --> 00:07:52,890
‫in einem JavaScript-Format.

121
00:07:52,890 --> 00:07:56,280
‫Im Moment möchten wir nur den tatsächlichen String zurücksenden,

122
00:07:56,280 --> 00:07:57,453
‫den wir erhalten.

123
00:07:59,146 --> 00:08:02,380
‫Bevor wir das tun können, müssen wir

124
00:08:02,380 --> 00:08:04,220
‫tatsächlich angeben, dass

125
00:08:04,220 --> 00:08:09,220
‫wir dem Browser mitteilen, dass wir JSON zurücksenden. Genau wie zuvor,

126
00:08:10,110 --> 00:08:14,160
‫wo wir den Inhaltstyp auf text/html setzen, müssen wir

127
00:08:14,160 --> 00:08:17,703
‫jetzt a Browser, den wir JSON senden.

128
00:08:19,060 --> 00:08:24,060
‫Also sagen wir res. writeHead wie zuvor, und

129
00:08:24,160 --> 00:08:27,260
‫jetzt verwenden wir den Statuscode 200, der

130
00:08:27,260 --> 00:08:31,830
‫für okay steht, und dann das Objekt der Header.

131
00:08:31,830 --> 00:08:35,330
‫In diesem Fall ist es nur einer,

132
00:08:40,320 --> 00:08:45,320
‫also Content-type, und wenn wir JSON senden, müssen wir application/json sagen.

133
00:08:49,570 --> 00:08:53,240
‫Für HTML ist es also text/html, für

134
00:08:53,240 --> 00:08:56,323
‫JSON ist es application/json, und

135
00:08:58,330 --> 00:09:01,933
‫sehen wir uns das jetzt an.

136
00:09:05,200 --> 00:09:08,183
‫Laden Sie den Server hier sehr schnell

137
00:09:12,600 --> 00:09:17,600
‫neu, und tatsächlich haben wir hier unsere API, die alle Daten zu

138
00:09:17,690 --> 00:09:20,053
‫unseren fünf Produkten zurücksendet.

139
00:09:20,950 --> 00:09:25,800
‫So großartig, das ist großartig, und es ist großartig, aber es

140
00:09:25,800 --> 00:09:27,970
‫ist eigentlich nicht perfekt, weil

141
00:09:27,970 --> 00:09:31,463
‫es nicht wirklich 100% effizient ist, und

142
00:09:32,546 --> 00:09:36,780
‫das liegt daran, dass jedes Mal, wenn jemand jetzt

143
00:09:36,780 --> 00:09:40,640
‫diese /api-Route trifft, die Datei gelesen und dann zurückgesendet

144
00:09:40,640 --> 00:09:42,640
‫werden muss .

145
00:09:42,640 --> 00:09:45,720
‫Stattdessen können wir die Datei nur einmal am

146
00:09:45,720 --> 00:09:49,110
‫Anfang lesen und dann jedes Mal, wenn jemand diesen Weg

147
00:09:49,110 --> 00:09:51,600
‫einschlägt, die Daten einfach zurücksenden, ohne

148
00:09:51,600 --> 00:09:55,273
‫sie jedes Mal lesen zu müssen, wenn ein Benutzer angefordert wird.

149
00:09:56,410 --> 00:09:58,180
‫Ist das sinnvoll?

150
00:09:58,180 --> 00:10:01,423
‫Nun, was ich tun werde, ist, das hier zu veröffentlichen.

151
00:10:03,550 --> 00:10:07,680
‫Okay, und natürlich brauche ich das alles nicht, also ist

152
00:10:07,680 --> 00:10:10,530
‫das nicht hier, und das ist nicht

153
00:10:10,530 --> 00:10:12,720
‫hier, und tatsächlich wird

154
00:10:12,720 --> 00:10:15,630
‫es etwas anders sein, und das liegt

155
00:10:15,630 --> 00:10:19,570
‫daran, dass wir jetzt tatsächlich die synchrone Version verwenden, und

156
00:10:19,570 --> 00:10:22,280
‫ich weiß, was Sie denken, nämlich

157
00:10:22,280 --> 00:10:25,440
‫dass die synchrone Version die Codeausführung blockiert, oder?

158
00:10:25,440 --> 00:10:27,570
‫Und das stimmt zwar, aber in

159
00:10:27,570 --> 00:10:29,580
‫diesem Fall ist es überhaupt

160
00:10:29,580 --> 00:10:32,040
‫kein Problem, und das liegt daran, dass

161
00:10:32,040 --> 00:10:36,240
‫der Code der obersten Ebene tatsächlich nur einmal am Anfang ausgeführt wird.

162
00:10:36,240 --> 00:10:39,260
‫Nur diese Callback-Funktion, zum Beispiel hier,

163
00:10:39,260 --> 00:10:43,440
‫die createServer-Funktion, also diese Funktion hier, wird jedes Mal

164
00:10:43,440 --> 00:10:46,160
‫ausgeführt, wenn eine neue Anforderung

165
00:10:46,160 --> 00:10:50,260
‫vorliegt, aber kein Code, der hier draußen ist.

166
00:10:50,260 --> 00:10:53,210
‫Der Code, der sich außerhalb der Callback-Funktionen

167
00:10:53,210 --> 00:10:57,500
‫befindet, der sogenannte Top-Level-Code, wird immer nur ausgeführt, wenn wir das

168
00:10:57,500 --> 00:11:01,500
‫Programm starten, und daher spielt es in dieser Situation keine

169
00:11:01,500 --> 00:11:04,660
‫Rolle, ob er die Ausführung blockiert, denn auch

170
00:11:04,660 --> 00:11:07,350
‫hier gilt: es passiert nur

171
00:11:07,350 --> 00:11:11,160
‫einmal und nur wenn der Code tatsächlich startet, oder?

172
00:11:11,160 --> 00:11:12,820
‫Macht Sinn?

173
00:11:12,820 --> 00:11:16,060
‫Und deshalb werden wir jetzt die Sync-Version verwenden, weil

174
00:11:16,060 --> 00:11:19,100
‫es tatsächlich einfacher ist, diese Daten zu

175
00:11:19,100 --> 00:11:23,060
‫verarbeiten, weil die Daten einfach in eine Variable gelegt werden, die

176
00:11:23,060 --> 00:11:25,253
‫wir nicht sofort verwenden können.

177
00:11:27,930 --> 00:11:32,180
‫Machen Sie sich also keine Sorgen darüber, dass diese Funktion blockiert, da

178
00:11:32,180 --> 00:11:34,800
‫sie sich wiederum im Code der obersten Ebene

179
00:11:34,800 --> 00:11:37,200
‫befindet und nur einmal ausgeführt wird.

180
00:11:37,200 --> 00:11:39,410
‫Das Geheimnis hier ist einfach

181
00:11:39,410 --> 00:11:42,530
‫zu wissen, welcher Code nur einmal und nur

182
00:11:42,530 --> 00:11:45,890
‫am Anfang ausgeführt wird und welcher Code immer wieder

183
00:11:45,890 --> 00:11:49,663
‫ausgeführt wird und ist daher problematisch beim Blockieren der Ereignisschleife.

184
00:11:50,560 --> 00:11:52,240
‫Und natürlich werden Sie

185
00:11:52,240 --> 00:11:55,990
‫das während des Rests dieses großen, großen Kurses lernen.

186
00:11:55,990 --> 00:11:58,650
‫Sie erfahren also alles über die Ereignisschleife, und welcher

187
00:11:58,650 --> 00:12:01,990
‫Code blockiert und welcher nicht und warum, und das ist nur das

188
00:12:01,990 --> 00:12:04,760
‫erste Mal, dass ich es erwähne, aber es wird

189
00:12:04,760 --> 00:12:06,560
‫nicht das letzte Mal sein.

190
00:12:07,620 --> 00:12:11,173
‫Sie werden mich immer wieder dasselbe sagen hören.

191
00:12:14,180 --> 00:12:18,550
‫Rufen Sie also nur diese eine Daten auf, und dann brauchen

192
00:12:18,550 --> 00:12:20,423
‫wir natürlich nichts davon.

193
00:12:21,550 --> 00:12:24,253
‫Verschieben wir das einfach hierher, und das war's.

194
00:12:29,040 --> 00:12:32,120
‫Bevor also etwas passiert, werden die Daten aus

195
00:12:32,120 --> 00:12:34,340
‫der JSON-Datei in Daten eingelesen.

196
00:12:34,340 --> 00:12:38,740
‫Es wird dann auch das in ein Objekt parsen.

197
00:12:38,740 --> 00:12:43,043
‫Nennen wir es hier dataObject, und was wir

198
00:12:44,370 --> 00:12:48,060
‫hier tun werden, ist, diese Datei nicht

199
00:12:48,060 --> 00:12:51,030
‫bei jeder Anforderung zu lesen,

200
00:12:51,030 --> 00:12:55,960
‫sondern einfach die Daten zurückzusenden, die wir jetzt in unserem

201
00:12:55,960 --> 00:12:57,283
‫Top-Level-Code haben.

202
00:13:04,010 --> 00:13:08,450
‫Diese Daten hier kommen jetzt also von hier, weil dieser Code

203
00:13:08,450 --> 00:13:11,060
‫in der Callback-Funktion natürlich aufgrund

204
00:13:11,060 --> 00:13:15,543
‫der Bereichskette Zugriff auf den Code der obersten Ebene hat, oder?

205
00:13:17,510 --> 00:13:21,000
‫Abbrechen, erneut ausführen und nur um Ihnen zu beweisen, dass

206
00:13:21,000 --> 00:13:23,803
‫es immer noch funktioniert und es funktioniert.

207
00:13:25,070 --> 00:13:28,560
‫So perfekt, und das ist besser, das ist effizienter, oh, und warum

208
00:13:28,560 --> 00:13:30,023
‫habe ich das geschlossen?

209
00:13:31,470 --> 00:13:34,863
‫Okay, lass es uns ganz schnell wieder aufmachen.

210
00:13:37,890 --> 00:13:38,793
‫Auf geht's.

211
00:13:41,430 --> 00:13:45,890
‫Das ist also unsere sehr einfache API, die es dem

212
00:13:45,890 --> 00:13:49,430
‫Benutzer jetzt ermöglicht, einfach alle Daten über unsere

213
00:13:49,430 --> 00:13:52,353
‫Anwendung mit einem einzigen API-Aufruf anzufordern.

214
00:13:53,810 --> 00:13:56,740
‫Also haben wir hier eine weitere Route

215
00:13:56,740 --> 00:13:59,340
‫hinzugefügt, /api, dann lesen wir die

216
00:13:59,340 --> 00:14:02,930
‫Datei synchron, fügen sie in dieses Objekt ein und

217
00:14:02,930 --> 00:14:06,010
‫senden dann einfach dieses Objekt als Antwort zurück,

218
00:14:06,010 --> 00:14:11,010
‫aber vorher geben wir an, dass wir application/json zurücksenden, also dass der Browser

219
00:14:11,353 --> 00:14:15,200
‫genau weiß, was ihn erwartet, und in den nächsten paar

220
00:14:15,200 --> 00:14:16,720
‫Videos werden wir

221
00:14:16,720 --> 00:14:19,730
‫tatsächlich mit dem Erstellen der Benutzeroberfläche beginnen,

222
00:14:19,730 --> 00:14:22,673
‫also ist das der aufregendste Teil, oder?

