﻿1
00:00:01,450 --> 00:00:05,930
‫Dieses Video ist ein weiteres wirklich spannendes Video,

2
00:00:05,930 --> 00:00:08,970
‫denn jetzt werden wir unseren

3
00:00:08,970 --> 00:00:13,750
‫allerersten echten Webserver erstellen, der Anfragen annehmen und

4
00:00:13,750 --> 00:00:15,973
‫Antworten zurücksenden kann.

5
00:00:17,930 --> 00:00:22,930
‫Und der erste Schritt besteht darin, ein weiteres Paket oder ein

6
00:00:22,950 --> 00:00:24,223
‫weiteres Modul

7
00:00:27,470 --> 00:00:29,533
‫einzubinden, und dieses heißt http.

8
00:00:33,530 --> 00:00:36,280
‫Wir verwenden also

9
00:00:36,280 --> 00:00:41,280
‫erneut die require-Funktion und benötigen dann das integrierte

10
00:00:41,380 --> 00:00:45,260
‫http-Modul, das uns Netzwerkfähigkeiten wie den

11
00:00:45,260 --> 00:00:48,423
‫Aufbau eines http-Servers bietet.

12
00:00:50,264 --> 00:00:52,980
‫Lassen Sie uns diesen Code jetzt hier

13
00:00:52,980 --> 00:00:55,863
‫auskommentieren, damit er uns nicht in die Quere kommt.

14
00:00:59,980 --> 00:01:04,133
‫Lassen Sie uns hier eine Art Trennlinie erstellen.

15
00:01:07,520 --> 00:01:09,723
‫Dieser ist also

16
00:01:12,730 --> 00:01:17,730
‫abgelegt, und dieser ist für den Server.

17
00:01:18,030 --> 00:01:20,930
‫Und jetzt müssen wir zwei Dinge tun, um

18
00:01:20,930 --> 00:01:22,900
‫unseren Server zu bauen.

19
00:01:22,900 --> 00:01:24,980
‫Zuerst erstellen wir einen

20
00:01:24,980 --> 00:01:27,820
‫Server und dann starten wir den Server,

21
00:01:27,820 --> 00:01:31,033
‫damit wir tatsächlich auf eingehende Anfragen hören können.

22
00:01:32,840 --> 00:01:37,680
‫Wir verwenden unser http-Modul und genau wie zuvor haben wir eine Methode

23
00:01:37,680 --> 00:01:40,760
‫verwendet, die sich auf diesem Objekt befindet.

24
00:01:40,760 --> 00:01:43,283
‫So wie wir es mit dem fs-Modul gemacht haben.

25
00:01:44,120 --> 00:01:46,530
‫Also http. createServer und

26
00:01:50,440 --> 00:01:54,000
‫create server akzeptieren eine Callback-Funktion, die jedes Mal

27
00:01:54,000 --> 00:01:56,130
‫ausgelöst wird, wenn eine

28
00:01:56,130 --> 00:01:58,870
‫neue Anfrage unseren Server erreicht.

29
00:01:58,870 --> 00:02:01,240
‫Und diese Callback-Funktion erhält

30
00:02:01,240 --> 00:02:05,080
‫Zugriff auf zwei sehr wichtige und grundlegende Variablen.

31
00:02:05,080 --> 00:02:08,763
‫Es ist die Anforderungsvariable und eine Antwortvariable.

32
00:02:09,850 --> 00:02:12,373
‫Und gleich ein bisschen mehr über sie.

33
00:02:13,670 --> 00:02:15,293
‫Also, Anfrage und

34
00:02:18,510 --> 00:02:20,630
‫Antwort. Alles, was wir jetzt

35
00:02:20,630 --> 00:02:23,890
‫tun möchten, ist, tatsächlich eine Antwort an den Client

36
00:02:23,890 --> 00:02:26,420
‫zurückzusenden, und das tun wir mit res. das ist dieses Objekt hier, dieses Antwortobjekt, . end und dann 'Hallo

37
00:02:26,420 --> 00:02:30,763
‫vom Server! '. Ende und dann 'Hallo vom Server! '.

38
00:02:32,690 --> 00:02:33,547
‫Das ist also die Antwort, die wir zurücksenden werden.

39
00:02:33,547 --> 00:02:36,850
‫Also noch einmal,

40
00:02:37,780 --> 00:02:42,740
‫jedes Mal, wenn eine neue Anfrage unseren Server erreicht, wird diese Callback-Funktion

41
00:02:42,740 --> 00:02:46,720
‫hier aufgerufen, und die Callback-Funktion hat Zugriff auf das Anfrageobjekt,

42
00:02:46,720 --> 00:02:49,910
‫das alle möglichen Dinge wie die Anfrage-URL und

43
00:02:49,910 --> 00:02:51,998
‫eine Menge anderer Dinge enthält.

44
00:02:51,998 --> 00:02:55,780
‫Andererseits gibt uns dieses Response-Objekt hier

45
00:02:55,780 --> 00:03:00,680
‫im Grunde viele Werkzeuge für den Umgang mit

46
00:03:00,680 --> 00:03:03,340
‫der Response, also zum

47
00:03:03,340 --> 00:03:05,880
‫Versenden der Response.

48
00:03:05,880 --> 00:03:07,820
‫Die einfachste ist. end, und this end here,

49
00:03:07,820 --> 00:03:10,860
‫wird die Benennung dieser Methode etwas später

50
00:03:10,860 --> 00:03:14,200
‫etwas sinnvoller sein.

51
00:03:14,200 --> 00:03:18,200
‫Im Moment wissen Sie nur, dass dies in diesem Fall der einfachste

52
00:03:18,200 --> 00:03:21,060
‫Weg ist, eine sehr, sehr einfache Antwort zurückzusenden.

53
00:03:21,060 --> 00:03:24,270
‫Das ist wirklich alles, was wir

54
00:03:24,270 --> 00:03:28,493
‫tun müssen, um eine Klartextantwort zurückzusenden, wenn eine

55
00:03:29,630 --> 00:03:31,840
‫bestimmte Anfrage eingeht.

56
00:03:31,840 --> 00:03:34,810
‫Wenn Sie jetzt etwas verwirrt sind über all

57
00:03:34,810 --> 00:03:36,863
‫diese Begriffe, wie eingehende Anfragen

58
00:03:37,730 --> 00:03:41,060
‫oder das Senden von Antworten, oder sogar darüber, warum

59
00:03:41,060 --> 00:03:44,950
‫wir tatsächlich Anfragen und Antworten hier auf unserem Server haben, dann

60
00:03:44,950 --> 00:03:48,220
‫machen Sie sich keine Sorgen, denn wir haben eine

61
00:03:48,220 --> 00:03:51,450
‫ganze Vorlesung vor uns darüber, wie das Web funktioniert,

62
00:03:51,450 --> 00:03:54,000
‫wo wir alles über das Client-Server-Modell sprechen

63
00:03:54,000 --> 00:03:56,660
‫werden und wie Netzwerkanwendungen im Allgemeinen funktionieren.

64
00:03:56,660 --> 00:04:00,430
‫Auch in diesem Abschnitt liegt mein Hauptaugenmerk darauf, Ihnen

65
00:04:00,430 --> 00:04:04,260
‫all das Zeug zu zeigen und es wirklich zum

66
00:04:04,260 --> 00:04:06,880
‫Laufen zu bringen, und dann folgt

67
00:04:06,880 --> 00:04:09,330
‫die Theorie etwas später.

68
00:04:09,330 --> 00:04:11,260
‫Das ist also die Philosophie, die

69
00:04:11,260 --> 00:04:13,793
‫ich in all meinen anderen Kursen verwendet habe, und

70
00:04:14,950 --> 00:04:16,610
‫sie funktioniert wirklich gut, und

71
00:04:16,610 --> 00:04:20,450
‫daher glaube ich, dass es eine gute Sache ist, dies auch hier zu tun.

72
00:04:20,450 --> 00:04:22,410
‫Wie auch immer, das Erstellen

73
00:04:22,410 --> 00:04:24,390
‫eines Servers war der erste Teil,

74
00:04:24,390 --> 00:04:28,100
‫und jetzt besteht der zweite Teil darin, eingehende Anfragen vom Client abzuhören.

75
00:04:28,100 --> 00:04:30,800
‫Dazu müssen wir nun tatsächlich das Ergebnis

76
00:04:30,800 --> 00:04:33,633
‫dieses createServers hier in einer neuen Variable speichern.

77
00:04:34,880 --> 00:04:39,690
‫Wir nennen es normalerweise Server, also ist

78
00:04:39,690 --> 00:04:44,203
‫server das Ergebnis dieser createServer-Methode hier.

79
00:04:45,620 --> 00:04:47,803
‫Es wird also einen

80
00:04:49,840 --> 00:04:54,840
‫Server erstellen, und jetzt verwenden wir diesen Server und können darauf hören.

81
00:04:55,720 --> 00:04:59,580
‫Listen akzeptiert einige Parameter. Der erste ist der Port,

82
00:05:00,730 --> 00:05:03,620
‫und normalerweise ist der Port,

83
00:05:03,620 --> 00:05:07,250
‫den wir in Note verwenden, zum Beispiel 8000.

84
00:05:07,250 --> 00:05:10,060
‫Aber Sie werden andere Zahlen

85
00:05:10,060 --> 00:05:13,660
‫wie 3000 oder 80 oder so ähnlich sehen.

86
00:05:13,660 --> 00:05:16,270
‫Und falls Sie sich fragen, was ein Port

87
00:05:16,270 --> 00:05:19,850
‫eigentlich ist, spielt es keine Rolle, aber Sie müssen nur wissen, dass

88
00:05:19,850 --> 00:05:22,890
‫es sich im Grunde genommen um eine Unteradresse auf einem

89
00:05:22,890 --> 00:05:24,870
‫bestimmten Host handelt, und der

90
00:05:24,870 --> 00:05:27,250
‫Host ist das, was wir als nächstes angeben.

91
00:05:27,250 --> 00:05:30,540
‫Wir müssen es eigentlich nicht angeben und verwenden

92
00:05:30,540 --> 00:05:33,453
‫dann standardmäßig einen lokalen Host, aber wir

93
00:05:34,400 --> 00:05:36,410
‫können es tatsächlich auch

94
00:05:36,410 --> 00:05:39,000
‫explizit für den lokalen Host angeben.

95
00:05:39,000 --> 00:05:42,140
‫Der lokale Host hat diese Adresse normalerweise standardmäßig, und der

96
00:05:42,140 --> 00:05:44,680
‫lokale Host bedeutet einfach der aktuelle Computer.

97
00:05:44,680 --> 00:05:49,680
‫Also der Computer, auf dem das Programm gerade läuft.

98
00:05:50,190 --> 00:05:53,390
‫Dies ist wiederum

99
00:05:53,390 --> 00:05:57,920
‫die Standard-IP-Adresse für diesen lokalen Host.

100
00:05:57,920 --> 00:06:00,680
‫Dieser hier wird also auf eingehende Anfragen lauschen.

101
00:06:00,680 --> 00:06:02,133
‫Also grundsätzlich den Server starten.

102
00:06:03,420 --> 00:06:07,830
‫Und als optionales Argument können wir auch eine

103
00:06:07,830 --> 00:06:10,233
‫Callback-Funktion übergeben, die

104
00:06:11,095 --> 00:06:13,550
‫ausgeführt wird, sobald der Server

105
00:06:13,550 --> 00:06:16,360
‫tatsächlich mit dem Zuhören beginnt.

106
00:06:16,360 --> 00:06:19,110
‫Hier ist es also durchaus üblich, einfach eine Meldung anzuzeigen,

107
00:06:19,110 --> 00:06:20,893
‫dass der Server gestartet wurde.

108
00:06:22,060 --> 00:06:27,060
‫Nehmen wir also an, auf Port 8000 zu hören.

109
00:06:27,470 --> 00:06:30,350
‫Und jetzt müssen wir nur noch zu

110
00:06:30,350 --> 00:06:33,947
‫dieser URL auf unserem Computer auf Port 8000 gehen.

111
00:06:40,037 --> 00:06:42,830
‫Bevor wir das tun können,

112
00:06:42,830 --> 00:06:47,320
‫müssen wir natürlich die Note-Anwendung ausführen, also den

113
00:06:47,320 --> 00:06:48,860
‫Index notieren. js, und hier haben wir unser Schloss.

114
00:06:48,860 --> 00:06:51,930
‫Also auf Anfrage auf Port 8000 hören.

115
00:06:51,930 --> 00:06:56,560
‫Und Sie sehen, dass

116
00:06:56,560 --> 00:06:59,803
‫die App weiterläuft, also wurde sie vorher immer

117
00:07:00,680 --> 00:07:03,590
‫sofort gestoppt, also hat sie ihre Arbeit

118
00:07:03,590 --> 00:07:06,090
‫erledigt und dann die Anwendung beendet.

119
00:07:06,090 --> 00:07:08,270
‫Im Moment tut es das nicht.

120
00:07:08,270 --> 00:07:10,500
‫Das liegt an der sogenannten

121
00:07:10,500 --> 00:07:12,890
‫Ereignisschleife, über die wir etwas später

122
00:07:12,890 --> 00:07:15,770
‫in einem anderen Abschnitt dieses Kurses sprechen werden.

123
00:07:15,770 --> 00:07:17,920
‫Aber egal, was die technischen Gründe dafür

124
00:07:17,920 --> 00:07:20,270
‫sind, es ist offensichtlich, dass die App nicht

125
00:07:20,270 --> 00:07:23,740
‫sofort beendet werden kann, da wir dann keine neuen Anfragen erhalten könnten.

126
00:07:23,740 --> 00:07:27,600
‫Wenn wir also einen Server starten, kann Note den

127
00:07:27,600 --> 00:07:31,513
‫Prozess nicht einfach beenden, also das Programm beenden, da das

128
00:07:32,550 --> 00:07:34,290
‫ganze Ziel darin

129
00:07:34,290 --> 00:07:37,410
‫besteht, auf den Eingang der Anforderungen zu warten.

130
00:07:37,410 --> 00:07:40,790
‫Das ist es, was ich Ihnen als nächstes zeigen werde.

131
00:07:40,790 --> 00:07:43,523
‫Lassen Sie uns zunächst nur die IP-Adresse auf Port 8000 öffnen.

132
00:07:46,050 --> 00:07:48,650
‫Und dafür verwenden wir den Doppelpunkt und dann die Portnummer.

133
00:07:48,650 --> 00:07:53,650
‫Dies ist also der Host, der aus dem lokalen Host,

134
00:07:55,450 --> 00:07:59,850
‫dem Doppelpunkt und dann der Portnummer besteht.

135
00:07:59,850 --> 00:08:02,860
‫Enter drücken und los gehts.

136
00:08:02,860 --> 00:08:05,083
‫Also, hallo vom Server!

137
00:08:06,090 --> 00:08:08,340
‫Und ja, es funktioniert wirklich.

138
00:08:08,340 --> 00:08:11,320
‫Auf Ihrem Computer läuft ein echter Webserver

139
00:08:11,320 --> 00:08:13,370
‫mit NoteJS, herzlichen Glückwunsch.

140
00:08:13,370 --> 00:08:17,350
‫Gehen wir also hierher zurück und analysieren noch einmal, was hier passiert ist.

141
00:08:17,350 --> 00:08:20,880
‫Wir haben unseren Server mit createServer erstellt

142
00:08:20,880 --> 00:08:25,880
‫und eine Callback-Funktion übergeben, die jedes Mal ausgeführt wird, wenn

143
00:08:27,220 --> 00:08:30,980
‫eine neue Anfrage den Server erreicht, und dann

144
00:08:30,980 --> 00:08:33,260
‫haben wir angefangen, auf

145
00:08:33,260 --> 00:08:36,620
‫der lokalen Host-IP und dann auf Port

146
00:08:36,620 --> 00:08:39,820
‫8000 auf eingehende Anfragen zu warten.

147
00:08:39,820 --> 00:08:43,577
‫Sobald dies alles am Laufen war, haben wir die Anfrage tatsächlich ausgeführt, indem

148
00:08:43,577 --> 00:08:45,440
‫wir auf diese URL geklickt haben.

149
00:08:46,700 --> 00:08:50,840
‫Im Grunde also, indem Sie den lokalen Host auf Port 8000 treffen.

150
00:08:50,840 --> 00:08:52,840
‫Also wurde unter

151
00:08:52,840 --> 00:08:56,620
‫der Haube von NoteJS ein Ereignis

152
00:08:56,620 --> 00:09:01,460
‫ausgelöst, über das wir später noch einmal sprechen werden.

153
00:09:01,460 --> 00:09:03,230
‫Wichtig ist hier aber, dass dieses Ereignis

154
00:09:03,230 --> 00:09:05,260
‫es dann geschafft hat, dass diese Callback-Funktion aufgerufen wurde.

155
00:09:05,260 --> 00:09:08,320
‫Und schließlich haben wir

156
00:09:08,320 --> 00:09:12,633
‫dadurch diese Saite dann wieder zurückbekommen.

157
00:09:14,060 --> 00:09:17,070
‫Schauen wir uns das Request-Objekt nur

158
00:09:17,070 --> 00:09:19,463
‫aus Neugier an.

159
00:09:22,590 --> 00:09:26,030
‫Wir müssen den Server schließen und neu

160
00:09:26,030 --> 00:09:29,633
‫starten, da wir einige Änderungen am Code vorgenommen haben.

161
00:09:32,760 --> 00:09:37,340
‫Und beachten Sie, wie ich dieses Mal Control C tatsächlich verwendet habe,

162
00:09:37,340 --> 00:09:39,340
‫um die Anwendung zu beenden.

163
00:09:40,550 --> 00:09:44,530
‫Denken Sie also daran, dass ich am Anfang, als wir

164
00:09:44,530 --> 00:09:47,090
‫die Welligkeit verwendet haben, Control D verwendet

165
00:09:47,090 --> 00:09:49,430
‫habe, um sie zu beenden.

166
00:09:49,430 --> 00:09:51,100
‫Aber jetzt, wenn wir

167
00:09:51,100 --> 00:09:54,033
‫ein Note-Programm haben, das so läuft, müssen wir

168
00:09:55,270 --> 00:09:58,700
‫Control C verwenden, um dieses Programm grundsätzlich zu unterbrechen.

169
00:09:58,700 --> 00:10:02,060
‫Deshalb habe ich hier Control C verwendet und während

170
00:10:02,060 --> 00:10:03,253
‫des restlichen

171
00:10:05,420 --> 00:10:08,200
‫Kurses, wenn ich ein Programm beenden möchte, werde

172
00:10:08,200 --> 00:10:10,102
‫ich immer Control C verwenden.

173
00:10:10,102 --> 00:10:12,300
‫Das ist also wieder Kontrolle und nicht Befehl C.

174
00:10:12,300 --> 00:10:15,090
‫Auch auf einem Mac müssen Sie Control C verwenden.

175
00:10:15,090 --> 00:10:18,500
‫Machen wir das jetzt noch einmal, wir erhalten die gleiche Antwort,

176
00:10:18,500 --> 00:10:21,373
‫aber jetzt sollten wir etwas in der Konsole haben.

177
00:10:23,810 --> 00:10:27,920
‫Das hier ist also das Request-Objekt, und wie ich bereits erwähnt

178
00:10:27,920 --> 00:10:30,990
‫habe, gibt es hier eine Menge Zeug.

179
00:10:30,990 --> 00:10:35,060
‫Du siehst es?

180
00:10:35,060 --> 00:10:38,580
‫All das passt nicht einmal wirklich in die Konsole.

181
00:10:38,580 --> 00:10:39,910
‫Ich glaube, ich

182
00:10:39,910 --> 00:10:44,910
‫kann Ihnen nicht einmal all die coolen Daten zeigen, die darin enthalten sind.

183
00:10:47,366 --> 00:10:49,610
‫Eigentlich haben wir hier einige Header, also haben wir

184
00:10:51,865 --> 00:10:53,633
‫den Host und hier haben wir einige...

185
00:10:56,670 --> 00:10:59,590
‫Auch hier haben

186
00:10:59,590 --> 00:11:04,590
‫wir einige http-Header, über die wir, denke ich,

187
00:11:04,680 --> 00:11:07,900
‫im nächsten Video sprechen werden.

188
00:11:07,900 --> 00:11:09,870
‫Wie auch immer, hier ist es wichtig,

189
00:11:09,870 --> 00:11:11,763
‫dass wir wirklich Zugriff auf alle

190
00:11:13,970 --> 00:11:17,430
‫möglichen Dinge haben, wenn wir die Anfrage bearbeiten und die Antwort senden.

191
00:11:17,430 --> 00:11:20,800
‫Ist hier egal, lass uns das

192
00:11:20,800 --> 00:11:25,033
‫tatsächlich loswerden, speichern, dann beenden und neu starten.

193
00:11:26,470 --> 00:11:29,193
‫Und jetzt, um dieses Video zu

194
00:11:30,670 --> 00:11:35,320
‫beenden, möchte ich Ihnen zeigen, was wir in den nächsten

195
00:11:35,320 --> 00:11:37,890
‫Vorlesungen bis zum Ende

196
00:11:37,890 --> 00:11:40,470
‫dieses Abschnitts tatsächlich aufbauen werden.

197
00:11:40,470 --> 00:11:42,280
‫Es ist also diese kleine lustige App namens Node Farm.

198
00:11:43,150 --> 00:11:45,870
‫Wir haben hier ein paar Produkte,

199
00:11:45,870 --> 00:11:50,870
‫und all dies haben wir hier mit einer sehr einfachen HTML-Vorlage erstellt,

200
00:11:52,592 --> 00:11:56,240
‫und Sie können dann auf den Link klicken

201
00:11:56,240 --> 00:11:57,940
‫und Sie gelangen

202
00:11:57,940 --> 00:12:00,747
‫im Grunde zur Detailseite für dieses Produkt,

203
00:12:00,747 --> 00:12:03,310
‫in diesem Fall die Avocados.

204
00:12:03,310 --> 00:12:06,670
‫Es hat eine Menge Daten hier,

205
00:12:06,670 --> 00:12:10,500
‫eine Schaltfläche, die nichts tut, und dann können

206
00:12:10,500 --> 00:12:13,030
‫wir zur Seite zurückkehren.

207
00:12:13,030 --> 00:12:15,860
‫Also Avocados, dann haben wir zum Beispiel

208
00:12:15,860 --> 00:12:18,023
‫den Käse, und der hat

209
00:12:18,870 --> 00:12:22,180
‫dann natürlich für jedes dieser Produkte andere Daten.

210
00:12:22,180 --> 00:12:24,550
‫Es hat also dieses

211
00:12:24,550 --> 00:12:28,273
‫schöne frische, verrückte Design, damit es ein bisschen

212
00:12:28,273 --> 00:12:33,273
‫knallt, und ja, ich denke, das ist ein lustiges kleines Projekt.

213
00:12:33,540 --> 00:12:36,900
‫Und wir werden gleich im nächsten

214
00:12:36,900 --> 00:12:40,100
‫Video mit dem Bau beginnen.

