﻿1
00:00:01,100 --> 00:00:02,860
‫Kursleiter: Genau wie

2
00:00:02,860 --> 00:00:06,080
‫Express hat auch Mongoose das Konzept der Middleware.

3
00:00:06,080 --> 00:00:08,270
‫Lassen Sie uns nun etwas über

4
00:00:08,270 --> 00:00:11,163
‫die erste Art von Middleware lernen, die Dokument-Middleware.

5
00:00:12,830 --> 00:00:15,330
‫Jetzt können wir, genau wie bei Express,

6
00:00:15,330 --> 00:00:17,860
‫die Middleware von Mongoose verwenden, um zwischen zwei

7
00:00:17,860 --> 00:00:19,430
‫Ereignissen etwas zu bewirken.

8
00:00:19,430 --> 00:00:22,740
‫Beispielsweise können wir jedes Mal, wenn ein

9
00:00:22,740 --> 00:00:25,740
‫neues Dokument in der Datenbank gespeichert

10
00:00:25,740 --> 00:00:29,450
‫wird, eine Funktion zwischen dem Speichern-Befehl und dem eigentlichen

11
00:00:29,450 --> 00:00:33,480
‫Speichern des Dokuments oder auch nach dem eigentlichen Speichern ausführen.

12
00:00:33,480 --> 00:00:35,820
‫Aus diesem Grund wird die Middleware

13
00:00:35,820 --> 00:00:38,590
‫von Mongoose auch als Pre- und Post-Hooks bezeichnet.

14
00:00:38,590 --> 00:00:41,140
‫Also wieder, weil wir Funktionen definieren können, die

15
00:00:41,140 --> 00:00:44,710
‫vor oder nach einem bestimmten Ereignis ausgeführt werden, wie zum Beispiel

16
00:00:44,710 --> 00:00:47,100
‫das Speichern eines Dokuments in der Datenbank.

17
00:00:47,100 --> 00:00:52,100
‫Middleware ist also ein absolut grundlegendes Konzept in Mongoose,

18
00:00:52,100 --> 00:00:55,180
‫also genau wie in Express.

19
00:00:55,180 --> 00:00:57,190
‫Und es gibt unzählige

20
00:00:57,190 --> 00:00:59,780
‫Möglichkeiten und Anwendungsfälle für Middleware, und wir

21
00:00:59,780 --> 00:01:02,540
‫werden in diesem Projekt ständig Middleware verwenden.

22
00:01:02,540 --> 00:01:06,050
‫Es gibt also vier Arten von

23
00:01:06,050 --> 00:01:10,080
‫Middleware in Mongoose: Dokument-, Abfrage-, Aggregat- und Modell-Middleware.

24
00:01:10,080 --> 00:01:12,110
‫Und in dieser Vorlesung

25
00:01:12,110 --> 00:01:14,410
‫werden wir über Document Middleware sprechen,

26
00:01:14,410 --> 00:01:18,110
‫also Middleware, die auf das aktuell verarbeitete Dokument reagieren kann.

27
00:01:18,110 --> 00:01:20,920
‫Genau wie die virtuellen Eigenschaften definieren

28
00:01:20,920 --> 00:01:23,613
‫wir eine Middleware auf dem Schema,

29
00:01:25,800 --> 00:01:28,543
‫also tourSchema. Vor.

30
00:01:30,030 --> 00:01:32,850
‫Dies ist also für Pre-Middleware, die wiederum

31
00:01:32,850 --> 00:01:35,450
‫vor einem tatsächlichen Ereignis ausgeführt wird.

32
00:01:35,450 --> 00:01:39,360
‫Und dieses Ereignis ist in diesem Fall das Speicherereignis.

33
00:01:39,360 --> 00:01:41,350
‫Also diese Callback-Funktion, die wir hier

34
00:01:41,350 --> 00:01:42,613
‫als nächstes definieren

35
00:01:43,870 --> 00:01:44,820
‫werden, also

36
00:01:48,200 --> 00:01:51,980
‫Funktion, damit diese Funktion aufgerufen wird, bevor ein tatsächliches Dokument

37
00:01:51,980 --> 00:01:53,943
‫in der Datenbank gespeichert wird.

38
00:01:55,407 --> 00:02:00,407
‫Das ist also Dokument-Middleware, und sie läuft, lassen

39
00:02:02,010 --> 00:02:05,910
‫Sie mich das alles hier schreiben.

40
00:02:05,910 --> 00:02:09,640
‫Es wird also vor dem Speichern-Befehl und

41
00:02:10,550 --> 00:02:13,953
‫der . Befehl erstellen.

42
00:02:14,860 --> 00:02:17,040
‫Aber nicht auf viele einfügen.

43
00:02:17,040 --> 00:02:22,040
‫Wenn wir also diesen Befehl hier verwenden, also insertMany, dann

44
00:02:22,450 --> 00:02:26,153
‫wird das die Save-Middleware eigentlich nicht auslösen.

45
00:02:27,600 --> 00:02:29,140
‫Behalte das also immer im Hinterkopf.

46
00:02:29,140 --> 00:02:32,780
‫Es ist sehr wichtig zu wissen, dass nur beim

47
00:02:32,780 --> 00:02:35,560
‫Speichern und Erstellen tatsächlich diese Middleware hier

48
00:02:35,560 --> 00:02:36,943
‫ausgeführt wird.

49
00:02:38,929 --> 00:02:41,740
‫Beginnen wir also mit einer einfachen Konsole. log und was

50
00:02:42,670 --> 00:02:45,253
‫ich über die Konsole loggen werde, ist folgendes.

51
00:02:46,350 --> 00:02:49,870
‫In einer Save-Middleware zeigt das Disk-Schlüsselwort hier

52
00:02:49,870 --> 00:02:53,100
‫also auf das aktuell verarbeitete Dokument.

53
00:02:53,100 --> 00:02:56,640
‫Aus diesem Grund wird sie als Document Middleware bezeichnet.

54
00:02:56,640 --> 00:02:58,740
‫Auch hier, weil wir in

55
00:02:58,740 --> 00:03:02,470
‫dieser Funktion hier Zugriff auf das Dokument haben, das verarbeitet wird.

56
00:03:02,470 --> 00:03:05,133
‫In diesem Fall also das Dokument, das gespeichert wird.

57
00:03:06,078 --> 00:03:09,240
‫Lassen Sie mich Ihnen das mit dieser Konsole nur sehr

58
00:03:09,240 --> 00:03:11,300
‫schnell zeigen. Protokoll.

59
00:03:11,300 --> 00:03:13,610
‫Um diese Funktion jetzt auszulösen, denken

60
00:03:13,610 --> 00:03:17,800
‫Sie daran, dass wir einen Save-Befehl oder einen Create-Befehl ausführen müssen.

61
00:03:17,800 --> 00:03:22,020
‫Also müssen wir jetzt mit unserer API eine neue

62
00:03:22,020 --> 00:03:26,013
‫Tour erstellen, um dann diese Middleware auszulösen.

63
00:03:27,680 --> 00:03:32,680
‫Also gehen wir hier zum Postboten, und ich fange damit an, diese beiden neuen

64
00:03:33,880 --> 00:03:36,830
‫Routen zu speichern, die wir in den

65
00:03:38,450 --> 00:03:42,313
‫vorherigen Vorlesungen erstellt haben. Holen Sie sich also einen Monatsplan.

66
00:03:47,300 --> 00:03:52,300
‫Und dieser hier ist Tourstatistiken.

67
00:03:56,031 --> 00:03:59,523
‫Jetzt kann ich sie schließen und eine neue Tour erstellen.

68
00:04:00,430 --> 00:04:03,060
‫Und wir spezifizieren die Daten hier im Body.

69
00:04:03,060 --> 00:04:06,300
‫Jetzt ist nicht alles hier wirklich erforderlich, also werfen

70
00:04:06,300 --> 00:04:08,730
‫wir einen Blick darauf, was tatsächlich erforderlich

71
00:04:08,730 --> 00:04:11,040
‫ist, und entfernen Sie den Rest.

72
00:04:11,040 --> 00:04:13,483
‫Das ImageCover wird also

73
00:04:14,610 --> 00:04:18,500
‫benötigt, die Zusammenfassung, natürlich der Preis und ja.

74
00:04:18,500 --> 00:04:20,830
‫Also lasst uns das Zeug loswerden, das wir hier

75
00:04:21,760 --> 00:04:24,483
‫nicht wirklich brauchen, nur um es auf ein Minimum zu beschränken.

76
00:04:26,000 --> 00:04:28,730
‫Also die Bewertungen, Menge, Durchschnitt, also diese

77
00:04:28,730 --> 00:04:30,080
‫sind nicht notwendig.

78
00:04:36,550 --> 00:04:38,490
‫Also nenne ich das

79
00:04:38,490 --> 00:04:43,490
‫hier einfach die Testtour, nur um es hier wirklich einfach zu halten.

80
00:04:45,702 --> 00:04:49,370
‫Jetzt senden wir diese Anfrage und tatsächlich hat es das

81
00:04:49,370 --> 00:04:52,420
‫neue Dokument erstellt und jetzt werfen wir

82
00:04:52,420 --> 00:04:56,370
‫einen Blick auf unsere Konsole und sehen dieses Dokument hier.

83
00:04:56,370 --> 00:04:58,650
‫Und tatsächlich, hier ist es.

84
00:04:58,650 --> 00:05:01,540
‫Lassen Sie uns dies hier ein

85
00:05:01,540 --> 00:05:04,900
‫wenig erhöhen und so sieht unser Dokument

86
00:05:04,900 --> 00:05:08,510
‫aus, bevor es in die Datenbank gespeichert wird.

87
00:05:08,510 --> 00:05:11,710
‫Und so haben wir hier BewertungenDurchschnitt und Menge,

88
00:05:11,710 --> 00:05:13,500
‫die standardmäßig eingestellt sind.

89
00:05:13,500 --> 00:05:17,077
‫Denken Sie daran, also 4. 5 und null, und

90
00:05:19,185 --> 00:05:21,930
‫dann der Zeitstempel createdAt, und Sie können sogar die

91
00:05:21,930 --> 00:05:24,523
‫virtuelle Eigenschaft sehen, die wir hier definiert haben.

92
00:05:25,700 --> 00:05:28,100
‫Dies ist also wieder der Fall, bevor wir diese

93
00:05:28,100 --> 00:05:30,140
‫Daten tatsächlich in der Datenbank speichern.

94
00:05:30,140 --> 00:05:31,410
‫Zu diesem Zeitpunkt können

95
00:05:31,410 --> 00:05:34,600
‫wir also noch auf die Daten reagieren, bevor sie dann in

96
00:05:34,600 --> 00:05:36,920
‫der Datenbank gespeichert werden, und genau das werden

97
00:05:36,920 --> 00:05:38,173
‫wir jetzt tun.

98
00:05:39,520 --> 00:05:43,240
‫Also hier unten in unserer Middleware-Funktion.

99
00:05:43,240 --> 00:05:45,900
‫Und was ich hier tun möchte, ist, für jedes

100
00:05:45,900 --> 00:05:48,120
‫dieser Dokumente einen Slug zu erstellen.

101
00:05:48,120 --> 00:05:50,080
‫Denken Sie also daran, wie wir im

102
00:05:50,080 --> 00:05:52,510
‫ersten Abschnitt für jedes der Produkte, die wir im

103
00:05:52,510 --> 00:05:54,313
‫Geschäft hatten, eine Schnecke erstellt haben.

104
00:05:55,180 --> 00:05:57,860
‫Ein Slug ist also im Grunde nur eine

105
00:05:57,860 --> 00:06:01,590
‫Zeichenfolge, die wir in die URL einfügen können, normalerweise basierend auf

106
00:06:01,590 --> 00:06:03,570
‫einer Zeichenfolge wie dem Namen.

107
00:06:03,570 --> 00:06:05,780
‫In diesem Fall erstellen wir hier einen

108
00:06:05,780 --> 00:06:07,433
‫Slug basierend auf dem Tournamen.

109
00:06:09,150 --> 00:06:14,150
‫Denken Sie also daran, wie wir dafür das slugify-Paket verwendet haben.

110
00:06:14,210 --> 00:06:16,360
‫Und so lassen Sie uns jetzt fortfahren und das installieren.

111
00:06:20,120 --> 00:06:22,063
‫In Ordnung, und während das geht,

112
00:06:23,430 --> 00:06:25,743
‫lass uns weitermachen und es dann hier anfordern.

113
00:06:33,270 --> 00:06:34,980
‫Also slugify verlangen.

114
00:06:39,100 --> 00:06:41,893
‫Gehen wir zurück zu unserem ersten Fenster hier, eigentlich.

115
00:06:43,530 --> 00:06:46,220
‫Und jetzt, hier unten, wollen wir das

116
00:06:46,220 --> 00:06:48,550
‫nicht mehr an der Konsole protokollieren.

117
00:06:48,550 --> 00:06:51,720
‫Aber stattdessen können wir jetzt dies sagen und daran

118
00:06:51,720 --> 00:06:54,840
‫denken, dass dies das aktuell verarbeitete Dokument ist.

119
00:06:54,840 --> 00:06:58,060
‫Damit können wir nun eine neue Eigenschaft darauf definieren.

120
00:06:58,060 --> 00:06:59,860
‫Und genau das tue ich.

121
00:06:59,860 --> 00:07:03,250
‫Also das. slug sollte slugify sein, und

122
00:07:06,210 --> 00:07:08,390
‫dann nur ein String, aus dem wir

123
00:07:08,390 --> 00:07:13,390
‫einen slug erstellen möchten, und das wird das sein. name und dann wollen wir auch

124
00:07:13,470 --> 00:07:15,890
‫die Option übergeben, dass alles

125
00:07:15,890 --> 00:07:18,653
‫in Kleinbuchstaben umgewandelt werden soll, und das

126
00:07:19,970 --> 00:07:24,220
‫ist also kleiner: true, und jetzt speichere ich es ab.

127
00:07:24,220 --> 00:07:26,290
‫Und eine Sache, über die wir

128
00:07:26,290 --> 00:07:28,710
‫noch nicht gesprochen haben, ist die nächste Funktion.

129
00:07:28,710 --> 00:07:32,440
‫Genau wie in Express haben wir auch in der mMngoose-Middleware die

130
00:07:32,440 --> 00:07:35,300
‫nächste Funktion, im Grunde die nächste Middleware im

131
00:07:35,300 --> 00:07:37,780
‫Stack aufzurufen, wie wir bereits wissen.

132
00:07:37,780 --> 00:07:40,680
‫Jetzt haben wir in diesem Fall nur eine

133
00:07:40,680 --> 00:07:43,100
‫Middleware-Funktion, weshalb wir keine Probleme hatten,

134
00:07:43,100 --> 00:07:46,433
‫auch nicht als nächstes, aber das machen wir jetzt tatsächlich.

135
00:07:47,470 --> 00:07:50,040
‫Und so hat jede Middleware-Funktion

136
00:07:50,040 --> 00:07:52,723
‫in einer Pre-Save-Middleware Zugriff auf die nächste.

137
00:07:54,492 --> 00:07:57,700
‫Das ist also genau das gleiche wie in Express, und

138
00:07:57,700 --> 00:08:01,070
‫so rufen wir am Ende der Middleware next auf, und

139
00:08:01,070 --> 00:08:03,300
‫das ruft dann die nächste Middleware

140
00:08:03,300 --> 00:08:04,583
‫im Stack auf.

141
00:08:04,583 --> 00:08:07,540
‫Versuchen wir es also noch einmal.

142
00:08:07,540 --> 00:08:10,556
‫Und das wird Testtour Nummer zwei heißen.

143
00:08:10,556 --> 00:08:13,770
‫Ganz einfach, an den Himmel

144
00:08:13,770 --> 00:08:16,900
‫senden und warten.

145
00:08:16,900 --> 00:08:20,930
‫Und jetzt ist es aus irgendeinem Grund nicht wirklich hier.

146
00:08:20,930 --> 00:08:22,950
‫Mal sehen, ob wir einen Fehler bekommen haben,

147
00:08:22,950 --> 00:08:24,630
‫und das haben wir tatsächlich nicht.

148
00:08:24,630 --> 00:08:27,570
‫Aber der Grund, warum es nicht funktioniert,

149
00:08:27,570 --> 00:08:31,913
‫ist, dass wir im Moment keinen Slug in unserem Schema haben.

150
00:08:31,913 --> 00:08:35,360
‫Und denken Sie daran, dass uns dies tatsächlich schon einmal passiert ist,

151
00:08:35,360 --> 00:08:38,150
‫als wir nur ein paar Felder im Schema hatten.

152
00:08:38,150 --> 00:08:40,150
‫Und wenn wir einige Felder

153
00:08:40,150 --> 00:08:42,450
‫definieren, die nicht im Schema waren, wurden

154
00:08:42,450 --> 00:08:44,770
‫sie einfach nicht in der Datenbank beibehalten.

155
00:08:44,770 --> 00:08:47,070
‫Und das Gleiche passiert jetzt hier, also

156
00:08:47,070 --> 00:08:50,670
‫haben wir die Slug-Eigenschaft definiert, aber sie ist nicht in unserem Schema.

157
00:08:50,670 --> 00:08:54,200
‫Und deshalb wurde es dann auch nicht in der Datenbank gespeichert, also

158
00:08:54,200 --> 00:08:56,990
‫lass uns das schnell beheben und sagen wir mal,

159
00:08:56,990 --> 00:08:59,490
‫oh, ich weiß nicht, es spielt keine Rolle,

160
00:08:59,490 --> 00:09:01,373
‫kann es hier direkt nach dem

161
00:09:03,210 --> 00:09:06,253
‫Namen einfügen, also sollte die Schnecke einfach ein String sein.

162
00:09:08,443 --> 00:09:10,363
‫Und damit sollte es behoben sein.

163
00:09:11,610 --> 00:09:14,823
‫Gehen wir also zurück und erstellen die Testtour Nummer drei.

164
00:09:15,880 --> 00:09:18,220
‫Weil es nicht dasselbe sein kann, denn denken Sie daran,

165
00:09:18,220 --> 00:09:20,453
‫dass wir keine Touren mit demselben Namen haben können.

166
00:09:22,260 --> 00:09:26,290
‫Also machen Sie es noch einmal, und jetzt haben wir tatsächlich die Schneckeneigenschaft

167
00:09:26,290 --> 00:09:29,900
‫genau hier und sie basiert tatsächlich auf dem Namen, wie Sie

168
00:09:29,900 --> 00:09:31,170
‫hier sehen können.

169
00:09:31,170 --> 00:09:33,853
‫Toll, also lass uns hierher zurückgehen und

170
00:09:34,770 --> 00:09:36,463
‫das ein bisschen reduzieren.

171
00:09:37,480 --> 00:09:40,957
‫Hier haben wir also die Pre-Dokument-Middleware.

172
00:09:40,957 --> 00:09:44,000
‫Lassen Sie uns jetzt auch ganz schnell mit

173
00:09:44,000 --> 00:09:45,593
‫einer Post-Middleware experimentieren.

174
00:09:47,700 --> 00:09:52,700
‫Also tourSchema. posten und speichern wir wieder.

175
00:09:55,487 --> 00:09:58,740
‫Und dann die Callback-Funktion, die bei Post-Middleware

176
00:09:58,740 --> 00:10:01,090
‫nicht nur auf das

177
00:10:01,090 --> 00:10:03,860
‫nächste, sondern auch auf das gerade

178
00:10:03,860 --> 00:10:06,823
‫in der Datenbank gespeicherte Dokument Zugriff hat.

179
00:10:07,690 --> 00:10:10,883
‫Nennen wir das ein Dokument und dann das nächste.

180
00:10:12,193 --> 00:10:14,650
‫Und so werden Post-Middleware-Funktionen

181
00:10:14,650 --> 00:10:17,750
‫ausgeführt, nachdem alle Prä-Middleware-Funktionen

182
00:10:17,750 --> 00:10:20,090
‫abgeschlossen sind.

183
00:10:20,090 --> 00:10:23,440
‫Hier drin haben wir also eigentlich nicht mehr das

184
00:10:23,440 --> 00:10:25,910
‫disk-Schlüsselwort, sondern das im Grunde fertige

185
00:10:25,910 --> 00:10:27,853
‫Dokument hier in doc.

186
00:10:30,960 --> 00:10:34,650
‫Lassen Sie uns das fertige Dokument einfach in der

187
00:10:34,650 --> 00:10:37,640
‫Konsole protokollieren und dann als nächstes aufrufen.

188
00:10:37,640 --> 00:10:39,713
‫Auch in diesem Fall haben

189
00:10:39,713 --> 00:10:43,200
‫wir nur eine Post-Middleware und würden die nächste also nicht wirklich

190
00:10:43,200 --> 00:10:46,860
‫brauchen, aber es ist eine bewährte Methode, sie einfach immer einzuschließen.

191
00:10:46,860 --> 00:10:50,310
‫Nun wollte ich Ihnen auch zeigen, dass

192
00:10:50,310 --> 00:10:52,470
‫wir natürlich mehrere Pre-Middlewares

193
00:10:52,470 --> 00:10:56,283
‫oder auch Post-Middlewares für denselben Hook haben können.

194
00:10:57,270 --> 00:11:01,820
‫Und Hook nennen wir das hier speichern.

195
00:11:01,820 --> 00:11:04,690
‫Diese Middleware hier ist also im

196
00:11:04,690 --> 00:11:07,810
‫Grunde das, was wir einen Pre-Save-Hook nennen.

197
00:11:07,810 --> 00:11:11,490
‫Sie werden diese Terminologie also ständig sehen.

198
00:11:11,490 --> 00:11:14,173
‫Manche nennen es Middleware und manche nennen es Hooks.

199
00:11:15,270 --> 00:11:17,260
‫Dies wird also ein Pre-Save-Hook

200
00:11:17,260 --> 00:11:18,773
‫oder Pre-Save-Middleware sein.

201
00:11:21,880 --> 00:11:25,823
‫Also Funktion, und auf diese hat man weiter Zugriff.

202
00:11:28,770 --> 00:11:31,433
‫Und so lassen Sie uns hier einfach

203
00:11:33,780 --> 00:11:37,963
‫etwas in die Konsole protokollieren, wie zum Beispiel das Dokument speichern.

204
00:11:40,740 --> 00:11:45,023
‫Und dann als nächstes, und das sollte natürlich als nächstes kommen.

205
00:11:46,880 --> 00:11:48,750
‫Nur um zu sehen, ob wir einen

206
00:11:48,750 --> 00:11:50,653
‫Fehler bekommen, werde ich den nächsten hier weglassen.

207
00:11:51,490 --> 00:11:55,283
‫Nur um zu sehen, was passiert, wenn wir es nicht aufrufen.

208
00:11:57,290 --> 00:11:59,080
‫Also werde ich eine neue

209
00:11:59,080 --> 00:12:01,230
‫Tour erstellen und am Ende dieses Vortrags

210
00:12:01,230 --> 00:12:04,543
‫werde ich sie alle löschen, aber jetzt brauchen wir sie hier.

211
00:12:06,410 --> 00:12:09,930
‫Und jetzt sehen Sie, dass es noch nicht wirklich fertig ist,

212
00:12:09,930 --> 00:12:12,620
‫also stecken wir in dieser einen Middleware-Funktion fest, die

213
00:12:12,620 --> 00:12:14,473
‫nicht den nächsten Aufruf hat.

214
00:12:16,410 --> 00:12:18,343
‫Also im Grunde stecken wir hier drin fest.

215
00:12:19,550 --> 00:12:20,970
‫Lassen Sie uns also

216
00:12:22,810 --> 00:12:25,780
‫die Anfrage abbrechen und sie dann hierher zurückholen und

217
00:12:25,780 --> 00:12:27,173
‫es erneut versuchen.

218
00:12:29,550 --> 00:12:32,070
‫Und nun hat es tatsächlich funktioniert.

219
00:12:32,070 --> 00:12:35,740
‫Also unser Slug ist hier, richtig, und so werfen wir

220
00:12:35,740 --> 00:12:38,590
‫einen Blick auf unsere Konsole, und so

221
00:12:38,590 --> 00:12:41,973
‫läuft tatsächlich auch unsere zweite Pre-Middleware, also speichert

222
00:12:42,850 --> 00:12:45,797
‫die eine Protokollierung das Dokument und dann

223
00:12:45,797 --> 00:12:49,320
‫protokolliert unsere Post-Middleware das endgültige Dokument auf der Konsole.

224
00:12:49,320 --> 00:12:51,570
‫und so sollte das auch

225
00:12:51,570 --> 00:12:55,043
‫schon die Schnecke haben und ja, hier ist sie.

226
00:12:56,050 --> 00:12:57,870
‫Und das ist eigentlich alles,

227
00:12:57,870 --> 00:13:00,360
‫was ich Ihnen über Document Middleware zeigen musste.

228
00:13:00,360 --> 00:13:03,065
‫Jetzt werde ich diese beiden hier einfach auskommentieren,

229
00:13:03,065 --> 00:13:06,680
‫weil ich mein Log hier nicht die ganze Zeit mit dieser

230
00:13:06,680 --> 00:13:09,110
‫Konsole verschmutzen möchte. logs, aber ich

231
00:13:09,110 --> 00:13:11,190
‫behalte sie immer noch hier

232
00:13:11,190 --> 00:13:12,173
‫als Referenz.

233
00:13:13,530 --> 00:13:16,330
‫Ich möchte, dass Sie sich von diesem Vortrag

234
00:13:16,330 --> 00:13:18,980
‫daran erinnern, dass wir Middleware vor und nach

235
00:13:18,980 --> 00:13:20,930
‫einem bestimmten Ereignis ausführen können.

236
00:13:20,930 --> 00:13:23,160
‫Und im Fall von

237
00:13:23,160 --> 00:13:25,850
‫Dokument-Middleware ist dieses Ereignis normalerweise das Sicherungsereignis.

238
00:13:25,850 --> 00:13:29,260
‫Und dann haben wir in der Middleware-Funktion

239
00:13:29,260 --> 00:13:31,660
‫selbst Zugriff auf das

240
00:13:31,660 --> 00:13:35,163
‫Disk-Schlüsselwort, das auf das aktuell gespeicherte Dokument verweist.

241
00:13:36,190 --> 00:13:38,232
‫Und es ist auch sehr

242
00:13:38,232 --> 00:13:42,650
‫wichtig zu bedenken, dass diese Save-Middleware nur für die Save-

243
00:13:42,650 --> 00:13:44,650
‫und Create-Mongoose-Methoden läuft.

244
00:13:44,650 --> 00:13:47,690
‫Es wird zum Beispiel nicht für viele einfügen und

245
00:13:47,690 --> 00:13:50,490
‫auch nicht für find one and update oder

246
00:13:50,490 --> 00:13:54,380
‫find by ID and update laufen, die wir schon früher verwendet haben.

247
00:13:54,380 --> 00:13:58,110
‫Zum Beispiel haben wir hier irgendwo

248
00:14:00,870 --> 00:14:04,960
‫findByIdAndUpdate, aber das wird diese Save-Middleware

249
00:14:04,960 --> 00:14:06,862
‫nicht auslösen.

250
00:14:06,862 --> 00:14:09,610
‫Es ist also sehr wichtig, sich daran zu

251
00:14:09,610 --> 00:14:11,550
‫erinnern, denn tatsächlich müssen

252
00:14:11,550 --> 00:14:14,950
‫wir etwas später in diesem Projekt diese Einschränkung umgehen.

253
00:14:14,950 --> 00:14:17,160
‫Alles klar, dies ist also

254
00:14:17,160 --> 00:14:20,880
‫eine Dokumenten-Middleware zum Manipulieren von Dokumenten, die gerade gespeichert werden.

255
00:14:20,880 --> 00:14:23,833
‫Als nächstes werden wir über Abfrage-Middleware sprechen.

