‫Kursleiter: Sie haben also
‫bereits gelernt, wie Sie neue Dokumente in der Datenbank erstellen.
‫Aber in diesem
‫Vortrag zeige ich Ihnen einen einfacheren und noch besseren
‫Weg, indem wir unseren create tour handler implementieren.
‫An dieser Stelle macht
‫unsere API im Grunde nichts mehr.
‫Es funktioniert nicht
‫mehr, weil wir im Grunde alle Funktionen gelöscht haben,
‫die wir im letzten Video hatten.
‫Und das haben wir getan, damit wir es
‫in den nächsten Vorlesungen mit einer echten Datenbank nachbauen können.
‫Okay, im Grunde bauen wir also endlich unsere echte API.
‫Und wir beginnen mit der
‫Implementierung der createTour-Funktion.
‫Denken Sie jedoch an die Handler-Funktion,
‫die aufgerufen wird, sobald eine Post-Anfrage an
‫die Tourroute gestellt wird.
‫Das haben wir hier in tourRoutes.
‫Stellen wir das also hier.
‫Also, was ich gerade gesagt habe, ist dies.
‫Also haben wir diesen checkBody hier.
‫Was wir
‫tatsächlich auch löschen können.
‫Also wo ist das eigentlich?
‫checkBody in Ordnung,
‫das ist also noch eine dieser Funktionen, die wir
‫wirklich nicht mehr brauchen.
‫Denn dies diente im Grunde dazu, den Körper zu validieren.
‫Um zu sehen, ob der Name oder die Price-Eigenschaft darin enthalten ist.
‫Rechts?
‫Aber jetzt wird sich
‫eigentlich unser Mungo-Modell darum kümmern.
‫Und so war es auch
‫hier schön, uns zu zeigen, wie Middleware funktioniert,
‫aber jetzt können wir sie loswerden.
‫Okay, also werde ich es auch hier löschen.
‫Geben Sie ihm eine neue Speicherung.
‫Und jetzt funktioniert es wieder.
‫Wie auch immer, die Funktion,
‫die wir jetzt erstellen, ist diese createTour-Funktion.
‫Wo nur die einen
‫Daten aufgerufen werden, sobald jemand mit einer Post-Anfrage die Tourroute trifft.
‫Okay, um das noch einmal zusammenzufassen,
‫weil ich weiß, dass es mit
‫diesen verschiedenen Dateien und verschiedenen Ordnern und verschiedenen Funktionen
‫etwas verwirrend sein kann.
‫Aber es ist auch sehr
‫wichtig, dass wir von Anfang an damit beginnen,
‫unseren Code zu organisieren.
‫Okay?
‫Wie auch immer, wir sind hier in der Funktion createTour.
‫Und so erstellen wir nun tatsächlich eine neue Tour.
‫Und das werden wir basierend auf den Daten
‫tun, die von der Leiche eingehen.
‫Erinnere dich daran?
‫Denken Sie daran, wie wir vor ein paar
‫Vorlesungen Dokumente erstellt haben.
‫Also haben wir es so gemacht.
‫Sagen wir zum Beispiel newTour,
‫dann gleich newTour
‫und dann die Daten dort.
‫Also haben wir es so gemacht und dann ist das eine neue Tour.
‫Und dann geben wir newTour ein. speichern und
‫das funktioniert ganz gut.
‫Aber wir können es noch einfacher machen.
‫Anstatt dies zu tun, können wir
‫Tour machen. erstellen und dann die Daten dort einfügen.
‫Okay und das wird genau das gleiche tun.
‫Der Hauptunterschied besteht darin, dass wir in dieser
‫Version hier die Methode grundsätzlich direkt in der Tour aufrufen,
‫während wir in dieser ersten Version die Methode im
‫neuen Dokument aufgerufen haben.
‫Okay, und das ist also ganz anders.
‫Wir hatten also wieder die Tour, die wir aus dem
‫Modell erstellt haben.
‫Und dann haben wir auf dieser Tour die Speichermethode verwendet.
‫Weil das Dokument Zugriff auf diese Methode
‫und viele andere Methoden hat.
‫Aber hier in der
‫zweiten Situation nennen wir diese Create-Methode direkt am Modell selbst, okay?
‫Denken Sie jetzt daran, wie diese Speichermethode hier ein Versprechen zurückgegeben hat.
‫Und so gibt diese Kreation hier auch ein Versprechen zurück.
‫Um also Zugriff auf das Aktendokument zu bekommen,
‫wie es in der Datenbank
‫erstellt wurde, hätten wir dann . dann in Ordnung?
‫Aber anstatt Versprechungen wie diese zu verwenden,
‫werde ich asynchrones Awarten verwenden.
‫In Ordung.
‫Diese Funktion hier sollte also eine asynchrone Funktion sein.
‫Alles, was wir tun
‫müssen, ist, direkt hier asynchron zu schreiben.
‫Wir haben also Async und können nun das Ergebnis dieses
‫Versprechens hier abwarten.
‫Daher hoffe ich, dass Sie damit vertraut sind.
‫Und ich habe tatsächlich einen Abschnitt
‫in diesem Kurs, der sich mit genau diesen Dingen beschäftigt.
‫Wenn Sie sich diesen Abschnitt
‫also nicht angesehen haben, aber mit Async-Await immer noch nicht 100% vertraut
‫sind, dann schauen Sie sich diesen Abschnitt bitte
‫an, damit Sie wirklich verstehen, was hier vor sich geht.
‫Okay, anstatt dies zu verwenden, werde ich hier
‫async await verwenden und
‫dann den Ergebniswert dieses Versprechens in der
‫neuen Tour-Variablen speichern.
‫Okay, das letzte Stück des Puzzles
‫hier ist natürlich, einige echte Daten in diese Erstellungsmethode zu übergeben.
‫Anstelle dieses leeren Objekts
‫übergeben wir also den Request-Body
‫so req. body und das sind
‫die Daten, die mit der Post-Anfrage geliefert werden, oder?
‫Jetzt nur noch
‫einmal, um sicherzustellen, dass Ihnen alles klar ist.
‫Okay, wir können das Tourmodell direkt verwenden
‫und die create-Methode darauf aufrufen.
‫Dann übergeben wir an diese Funktion die
‫Daten, die wir in der Datenbank als neue Tour speichern möchten.
‫Und diese Daten stammen aus dem Post-Text, oder?
‫Und das wird im Punktkörper der Anfrage gespeichert.
‫Also diese Variable hier.
‫Nun wird diese Methode hier dann ein Versprechen zurückgeben.
‫Und wir erwarten dieses Versprechen mit
‫async-await und speichern dann dieses Ergebnis in der
‫newTour-Variable, die das neu
‫erstellte Dokument bereits mit der ID und allem ist, okay?
‫Also behalte ich
‫diesen Code hier nur als Referenz.
‫Und jetzt holen wir uns dieses Stück Daten hier zurück.
‫Eigentlich ein Stück Code.
‫Sparen Sie.
‫Und jetzt erhalten wir diesen ES-Lint-Fehler.
‫Werfen wir also einen Blick
‫darauf, dass Sie einfach unsere Maus hier anbringen.
‫Und es sagt uns, dass asynchrone Funktionen bis zu diesem Knoten
‫7 nicht unterstützt werden. 6 und daher kommt
‫dieser ES-Lint-Fehler von dem Knoten-Plugin, das wir tatsächlich
‫installiert haben.
‫Das sieht man also hier.
‫In Ordnung, also werden wir das Problem beheben, indem wir
‫einfach zum Paket gehen. json und
‫hier finden Sie die Knotenversion,
‫die wir tatsächlich verwenden.
‫Das ist also ganz einfach.
‫Wir müssen nur die Engine-Eigenschaft hier
‫in unserem JSON-Dokument angeben.
‫Und stellen Sie den Knoten auf größer oder
‫gleich 10 ein.
‫Okay, und das liegt daran,
‫dass wir in diesem Kurs mindestens Knoten 10 verwenden.
‫Also 7. 6 würde ausreichen, um diesen Fehler zu beseitigen,
‫aber wir geben natürlich die tatsächliche Version an,
‫die wir tatsächlich verwenden.
‫Also geben wir diesem einen Save.
‫Schließen Sie das.
‫Und so ist unser Fehler hier nun tatsächlich weg.
‫Jetzt nur noch ein Schritt, bevor wir dies in
‫unserer Postman-App tatsächlich ausprobieren können.
‫Und das ist, dass wir tatsächlich mit Fehlern umgehen müssen.
‫Okay, und denken Sie daran, dass
‫wir bei async-wait mit der try-Catch-Syntax auf Fehler testen müssen.
‫Also schreiben wir einen Try-Block.
‫Dann packen Sie unseren gesamten Code dort ein.
‫Und dann endlich ein Fangblock.
‫Welches, wie wir bereits wissen, Zugriff auf das Fehlerobjekt hat.
‫Und was stellen wir nun eigentlich hier ein?
‫Nun, wir müssen uns
‫überlegen, wann genau ein Fehler passieren kann.
‫Denken Sie also daran, wie wir
‫vor zwei Vorlesungen unsere ersten Dokumente erstellt haben.
‫Wir haben damals einen
‫Fehler bekommen, als wir versuchten, ein
‫Dokument ohne eines der erforderlichen Felder zu erstellen, oder?
‫Das war also ein Validierungsfehler.
‫Und es ist einer der Fehler, die hier abgefangen würden.
‫Okay, denn wenn wir versuchen würden, ein Dokument zu
‫erstellen, sagen wir, ohne eines der erforderlichen
‫Felder, dann würde dieses Versprechen,
‫das hier erstellt wird, abgelehnt werden, okay?
‫Wenn wir hier also ein abgelehntes
‫Versprechen haben, wird es in den Catch-Block eintreten.
‫Daher möchten wir in diesem Catch-Block hier im
‫Grunde eine Antwort zurücksenden, die
‫besagt, dass ein Fehler aufgetreten ist.
‫Okay, also res. Status hier wieder und
‫400 was für schlechte Anfrage steht. json und jetzt etwas sehr ähnliches wie dieses
‫hier, aber
‫sein Status und das ist fehlgeschlagen und
‫dann senden wir anstelle von Daten hier eine Nachricht
‫und lassen uns vorerst einfach die Nachricht auf den Fehler setzen.
‫In Ordung.
‫Kommen wir
‫nun endlich zurück zu unserer Postman-Anwendung und probieren Sie es aus.
‫Okay, also erstellen Sie diese und lassen Sie
‫uns jetzt eine neue Tour erstellen.
‫Im Moment haben wir hier
‫also den
‫Namen Dauerschwierigkeit und Preis und fügen wir eigentlich
‫auch die Bewertung hinzu und das
‫muss in doppelten Anführungszeichen stehen 4. 7.
‫Gut, und jetzt kommt der Moment.
‫Senden und tatsächlich geht es los.
‫Dies ist also die Tour, die
‫wir gerade erstellt haben.
‫Wir haben unsere Bewertung.
‫Wir haben unseren Namen und wir haben unseren Preis.
‫Und natürlich die automatisch erstellte ID.
‫Jetzt werden Sie vielleicht bemerken, dass wir keine Schwierigkeiten und
‫keinen Preis haben.
‫Nun, warum denkst du, ist das so?
‫Das liegt daran, dass diese beiden Felder tatsächlich nicht
‫in unserem Schema enthalten sind und
‫daher nicht in die Datenbank aufgenommen werden.
‫Alles andere, was nicht in unserem Schema
‫ist, wird also einfach ignoriert.
‫Das ist also die Macht unseres Schemas, in Ordnung?
‫Großartig, jetzt versuchen wir es tatsächlich noch einmal, das zu senden,
‫und das sollte uns einen Fehler geben, oder?
‫Und tatsächlich sind wir da.
‫Wir haben unsere 400 schlechte Anfrage.
‫Und wir haben diese Nachricht, die der vollständige Fehler
‫ist, den wir erhalten haben.
‫Und hier sehen wir, dass die Fehlermeldung doppelter Schlüssel ist.
‫Und das liegt daran, dass wir bereits die Test Tour 2 haben.
‫Und so konnte es kein weiteres schaffen.
‫Also lasst uns hier einfach eine andere erstellen, wie Jonas Tour.
‫Es spielt keine Rolle, okay?
‫Ich möchte es nur erstellen,
‫zuerst ohne all dies, nur um
‫zu sehen, ob wir einen weiteren Fehler erhalten.
‫Und tatsächlich bekommen wir hier noch einige Fehler mehr.
‫Diesmal heißt es, dass die Tourvalidierung fehlgeschlagen
‫ist, weil eine Tour einen
‫Preis haben muss.
‫Okay, Sie sehen also, dass
‫wir hier gerade diese seltsame Fehlerstruktur haben.
‫Also gibt Mongo DB dieses riesige komplette Fehlerobjekt zurück.
‫Und später werden wir uns tatsächlich darum kümmern.
‫Wir werden also nur einen ganzen Abschnitt über die Fehlerbehandlung haben.
‫Und bis dahin werden wir einige bedeutsamere Fehler erstellen.
‫Okay, jetzt ersetzen wir dieses Fehlerobjekt hier
‫einfach durch eine normale Zeichenfolge.
‫Nehmen wir an, es wurden ungültige Daten gesendet.
‫Okay, machen Sie so etwas nicht in einer echten Produktionsanwendung,
‫aber wir werden etwas später
‫eine echte Fehlerbehandlung
‫haben, die sich darum kümmert.
‫Okay, dem Client werden also sinnvolle Fehler angezeigt.
‫Gehen wir also einfach hierher zurück und senden Sie
‫es noch einmal.
‫Und so bekommen wir jetzt diese normale Saite hier.
‫Also lassen Sie uns hier einfach den Preis erstellen.
‫Setzen wir es auf 567 und
‫senden es dann.
‫Und so werden Sie jetzt sehen, dass
‫unsere Standardbewertung hier tatsächlich noch funktioniert.
‫Lassen Sie uns all dies jetzt auch im Kompass herausfinden.
‫Und tatsächlich bekommen wir unsere vier Touren in die Datenbank.
‫Also all diese seltsamen Tests, die wir
‫bis jetzt gemacht haben.
‫Also lass uns einfach weitermachen und die letzten beiden löschen.
‫Das waren wirklich nur zum Testen.
‫In Ordung.
‫Hier ist also wohl etwas schief gelaufen.
‫Okay, jetzt sind wir wieder bei diesen beiden.
‫Lassen Sie uns jetzt einfach den dritten erstellen, den
‫wir zuvor im letzten Abschnitt hatten.
‫Welches ist der Schnee-Abenteurer.
‫Also der
‫Schneeabenteurer.
‫Der Preis war...
‫Ich bin mir
‫nicht mehr sicher, vielleicht 697.
‫Und die Bewertung
‫ist wie sechs oder tatsächlich 4. 8.
‫Habe den Typen geschickt.
‫Und so gehen wir in der Tat los.
‫Groß.
‫Um kurz unsere createTour-Funktion zusammenzufassen.
‫Wir haben hier also einen Versuch mit Catch, weil wir hier
‫tatsächlich eine asynchrone Wait-Funktion verwenden.
‫Richtig, also verwenden wir async-await, weil
‫diese Tour. create gibt ein
‫Promise zurück, auf das
‫wir warten, damit wir das neu erstellte Tourdokument
‫in dieser Variablen speichern und es dann
‫zusammen mit der Antwort an
‫den Client hier unten senden können.
‫Okay, aber falls ein Fehler auftritt, wie
‫zum Beispiel ein Validierungsfehler, wird
‫dieser Fehler abgefangen und
‫wir senden etwas anderes mit
‫dieser Fehlermeldung an den Client zurück.
‫So erstellen wir Dokumente mit Mungo.
‫Als nächstes werden wir über das Lesen von Dokumenten sprechen.