‫Kursleiter: In Ordnung, in diesem
‫Vortrag werden wir über sogenannte verschachtelte
‫Routen sprechen, was sie sind, warum
‫wir sie brauchen und
‫wie wir sie tatsächlich in Express implementieren können.
‫Überlegen wir kurz, wie wir in
‫der Praxis eigentlich eine neue Rezension erstellen wollen.
‫Bis zu diesem Zeitpunkt haben wir beim Erstellen
‫neuer Bewertungen immer die Tour-ID
‫und die Benutzer-ID manuell in den Anfragetext
‫übergeben und dann die Bewertung von dort aus erstellt.
‫Während der Entwicklung ist das in Ordnung, aber so
‫wird eine Rezension in der realen
‫Welt natürlich nicht erstellt.
‫In der Realität sollte die
‫Benutzer-ID also idealerweise vom aktuell angemeldeten Benutzer
‫und eine Tour-ID von der aktuellen Tour stammen.
‫Das sollte idealerweise direkt in der
‫Route, also in der URL, kodiert werden.
‫Wenn Sie eine Post-Anfrage für eine neue Überprüfung
‫senden, möchten wir diese an eine URL wie diese senden.
‫Schreiben wir das hier nur als Kommentar auf.
‫Idealerweise möchten wir eine Anfrage
‫für Post, für Tour und die ID der Tour stellen,
‫hier spielt es keine Rolle, und dann Bewertungen.
‫Okay, jetzt haben wir also einfach
‫die Tour-ID direkt in der URL
‫und die Benutzer-ID kommt dann auch
‫vom aktuell angemeldeten Benutzer.
‫Was wir hier sehen, ist nun eine sogenannte verschachtelte Route.
‫Sie sind sehr sinnvoll,
‫wenn eine klare Eltern-Kind-Beziehung zwischen Ressourcen besteht.
‫Das ist hier eindeutig der Fall, richtig.
‫Bewertungen sind eindeutig ein Kind der Tour.
‫Diese verschachtelte Route
‫bedeutet im Grunde genommen,
‫auf die Bewertungsressource der Tourressource zuzugreifen.
‫Auf die gleiche Weise wollen wir eigentlich
‫auch auf die Bewertungen einer bestimmten Tour auf die gleiche Weise zugreifen.
‫Nehmen wir an, dann eine
‫Get-Anfrage und noch einmal für Tour-Slash-Tour-ID und Slash-Reviews.
‫Dies würde uns dann
‫idealerweise alle Bewertungen für diese Tour besorgen.
‫Wir könnten noch weiter gehen
‫und auch die ID der Bewertung angeben.
‫Also wieder nur eine zufällige Zeichenfolge, aber Sie verstehen,
‫worauf es ankommt.
‫In diesem Fall würden wir mit
‫der ID diese hier auf
‫der Tour mit dieser ID überprüfen lassen.
‫Darum geht es bei verschachtelten Routen.
‫Dies ist eine viel einfachere Möglichkeit, die Funktionsweise
‫der API für unsere API-Benutzer zu lesen und zu verstehen.
‫Es ist viel einfacher, als
‫mit Abfragezeichenfolgen und all dem Zeug herumzuspielen.
‫Außerdem zeigt es wirklich,
‫wie es diese klare Beziehung zwischen diesen
‫Ressourcen, Bewertungen und Touren gibt.
‫Okay, aber genug geredet.
‫Lassen Sie uns dies nun tatsächlich
‫implementieren, beginnend mit der Post-Route.
‫Da die Route nun eigentlich mit Touren beginnt, wird
‫sie natürlich auf unseren Tourenrouter umgeleitet.
‫Wir werden diese Funktionalität zumindest vorerst im Tourrouter
‫implementieren müssen, auch wenn dies
‫etwas kontraintuitiv erscheint, da es sich
‫tatsächlich um Bewertungen handelt.
‫Aber lassen Sie es uns jetzt noch einmal so implementieren.
‫Wir kommen zu unserem Benutzerrouter und zuerst
‫müssen wir, da
‫wir hier
‫Bewertungen verwenden, den Bewertungscontroller importieren.
‫Controller erfordern.
‫Vielleicht hätte ich einfach die Zeile von vorher kopieren sollen.
‫Controller und Review-Controller.
‫In Ordnung, jetzt hier ganz unten, und holen wir
‫uns unseren Code für
‫dieses Beispiel von hier nur
‫als Referenz.
‫Damit wir es jetzt auch tatsächlich umsetzen können.
‫Die Route, die wir hier
‫implementieren werden, ist Slash ID und dann Reviews.
‫In diesem Tourteil hier haben wir, wie
‫Sie bereits wissen, diesen
‫Router montiert und müssen ihn daher hier nicht wiederholen.
‫Aber dann haben wir die Tour-ID und dann die Bewertungen.
‫Um dies wirklich zu verdeutlichen,
‫nennen wir es eigentlich Tour-ID, da wir
‫es hier mit
‫anderen Ressourcen zu tun haben.
‫Es ist also etwas klarer, es wirklich so zu nennen, wie es ist.
‫Wir wollen nun den Create-Review implementieren.
‫Authcontroller-Punktschutz.
‫Wir möchten auch den Zugriff nur
‫auf Benutzer beschränken, und dann erstellt unser Überprüfungscontroller
‫natürlich keine Überprüfung.
‫Auch hier ist es etwas seltsam und
‫kontraintuitiv, den Review-Controller hier in der
‫Benutzerroute tatsächlich aufzurufen.
‫Nun, eigentlich sollte es nicht in der Benutzerroute sein.
‫Aus irgendeinem Grund habe
‫ich die Benutzerrouten geöffnet und nicht die Tourrouten, das tut mir leid.
‫Schneiden wir es von hier aus, kommen wir zu unseren Tourrouten
‫und tun es tatsächlich hier unten.
‫Natürlich brauchen wir auch den Review-Controller.
‫Jetzt sollten wir also startklar sein.
‫Das war ein dummer Fehler.
‫Aber wie auch immer, was
‫ich sagte, ist, dass es nicht viel
‫Sinn macht, den Review-Controller in der Tourroute tatsächlich anzurufen,
‫aber auch hier müssen wir es vorerst
‫so machen, da die Route mit Tour beginnt.
‫Dieser Router wird aktiviert.
‫Im nächsten Video werden wir das
‫beheben, aber im Moment wollen wir es
‫einfach zum Laufen bringen
‫und uns mit diesem ganzen Konzept der verschachtelten Routen vertraut machen.
‫Jedenfalls haben wir jetzt unsere Tour-ID direkt in der Route, aber
‫natürlich müssen wir
‫dem Controller mitteilen, dass er jetzt diese Tour-ID und auch
‫die ID des aktuell eingeloggten Benutzers verwenden soll.
‫Wir müssen
‫jetzt fortfahren und unseren Review-Controller direkt
‫hier bei Create Review aktualisieren.
‫Was wir tun werden, ist Folgendes.
‫Wir sagen, wenn es keine Punkt-Körper-Punkt-Tour-Anfrage gibt, also im Grunde, wenn
‫wir die Tour-ID und den Körper nicht
‫angegeben haben, wollen wir
‫dies als diejenige definieren, die von
‫der URL kommt.
‫Req dot body dot tour ist gleich Request,
‫und jetzt erinnern Sie sich
‫daran, wie dieser URL-Parameter auf request dot params steht und
‫dann natürlich den Namen des Parameters selbst, also Tour-ID.
‫Dies ist der erste Teil und
‫zweitens müssen wir das gleiche mit dem Benutzer machen.
‫Wenn es
‫keinen Anforderungspunktbenutzer oder tatsächlich einen
‫Anforderungspunktkörperpunktbenutzer gibt, dann sollte
‫der Anforderungspunktkörperpunktbenutzer die Anforderungspunktbenutzerpunkt-ID sein.
‫Und wieder erhalten wir von der
‫Protect-Middleware die Anforderung Punktbenutzer, und das war's dann auch schon.
‫Lassen Sie uns hier einfach einen Kommentar einfügen, verschachtelte Routen.
‫Damit schaffen wir es
‫eigentlich, dass der Benutzer die Tour und die
‫Benutzer-ID noch manuell angeben kann.
‫Was wir hier
‫tun, ist einfach, sie zu definieren, wenn sie
‫nicht vorhanden sind oder wenn sie nicht im Anforderungstext angegeben sind.
‫Das sollte uns reichen, um das jetzt zu testen.
‫In Ordnung, also werfen wir einen Blick
‫auf die Benutzer, die wir zu diesem Zeitpunkt erhalten haben.
‫Wir haben diese beiden
‫regulären Benutzer, wir haben den Testbenutzer und wir haben
‫Jonas hier, aber wir haben sein Passwort vergessen.
‫Lassen Sie uns diesen
‫Benutzer löschen und einen neuen erstellen.
‫In Ordnung, also in Compass, die Benutzer, und das
‫ist dieser.
‫Lassen Sie uns diesen Benutzer im Grunde neu erstellen.
‫Alles, was wir wirklich brauchen, sind diese beiden Daten.
‫Eigentlich ist das Anmelden.
‫Der gleiche Name, die
‫gleiche E-Mail und das gleiche Passwort.
‫Zu diesem Zeitpunkt sind wir bereits
‫als dieser Benutzer, sogenannter Jonas, eingeloggt, denken wir daran.
‫Als nächstes müssen wir auswählen, für welche Tour
‫wir die Bewertung tatsächlich erstellen möchten.
‫Machen wir es hier bei The Forest Hiker
‫noch einmal, damit wir dann mehrere Bewertungen auf derselben Tour erhalten.
‫Was wir jetzt
‫tun werden, ist im Grunde auf die verschachtelte Route zuzugreifen,
‫die wir gerade erstellt haben.
‫Wir haben die Touren.
‫Jetzt müssen wir die Tour-ID abrufen,
‫und wieder werden wir diese
‫für The
‫Forest Hiker verwenden, dann die Bewertungen streichen und uns dann
‫an einen Beitrag erinnern.
‫Dann müssen wir auch noch die Berechtigung
‫angeben, also Inhabertoken, und dann brauchen wir jetzt im Body
‫nur noch die
‫Bewertung und die Bewertung anzugeben.
‫Die Bewertung ist
‫fünf und dann etwas Text hier.
‫Das sollte also eigentlich schon reichen, um das auszuprobieren.
‫Senden wir es.
‫Jetzt haben wir aus irgendeinem Grund
‫keine Berechtigung, diese Aktion auszuführen, also ist das seltsam.
‫Wir haben uns als dieser Jonas angemeldet, und es
‫ist eigentlich nur ein normaler Benutzer,
‫wie es sein sollte.
‫Werfen wir einen Blick auf unseren Router.
‫Hier, oh okay, es ist der Benutzer, nicht der Benutzer.
‫Ein kleiner Fehler wie dieser kann, wie Sie sehen, die
‫gesamte Route zum Absturz bringen, also versuchen wir es jetzt noch einmal.
‫Und jetzt bekommen wir tatsächlich die endgültige Bewertung, bei
‫der sowohl die Tour als auch der Benutzer richtig definiert sind.
‫Zumindest hoffe ich das.
‫Die Tour-ID endet hier in 951, also ist
‫es hier genau gleich.
‫Der Benutzer ist dieses 1f3, und es ist
‫tatsächlich genau dasselbe.
‫Okay, und jetzt sollten wir das eigentlich
‫bestätigen können, und so ist diese Get-Tour
‫hier eigentlich schon die, auf der wir die
‫neue Rezension erstellt haben.
‫Werfen wir einen Blick darauf, und tatsächlich bekommen
‫wir jetzt zwei Bewertungen.
‫Dieser ist der, den wir gerade erstellt haben.
‫Es ist auf der richtigen Tour
‫und natürlich auch der richtige Benutzer mit dem Namen Jonas.
‫Super, das ist echt cool.
‫Lass uns weitermachen und das speichern.
‫Ich werde hier wieder einen neuen Ordner erstellen.
‫Ich werde es Tours Slash Reviews nennen.
‫Jetzt hier drinnen,
‫erstellen wir eine neue Rezension auf Tour.
‫Das sollte eigentlich draußen sein und genau so.
‫Lassen Sie uns das hier tatsächlich platzieren.
‫Es funktioniert aus irgendeinem Grund nicht so wie es sollte.
‫Und es geht los.
‫Okay, das hat prima geklappt,
‫aber wie bereits erwähnt, ist die
‫Implementierung an dieser Stelle etwas verwirrend.
‫Das liegt wiederum daran, dass wir im Tourrouter
‫technisch eine Review-Route definiert haben.
‫Das ist etwas verwirrend, und im nächsten Video
‫werden wir das beheben.