‫Kursleiter: In
‫diesem Video werden wir also weiterhin die Ressource der
‫Bewertung implementieren und diesmal einen Endpunkt
‫zum Abrufen aller Bewertungen und auch zum Erstellen neuer Bewertungen implementieren.
‫An dieser Stelle wiederholen wir im Grunde nur Dinge, die
‫wir bereits in den vorherigen Abschnitten gelernt haben.
‫Und deshalb habe ich in diesem Video eine weitere Herausforderung für dich.
‫Im Grunde möchte ich, dass Sie diese beiden Endpunkte
‫implementieren, also einen Endpunkt zum
‫Abrufen aller Überprüfungen und einen Endpunkt zum eigenständigen Erstellen neuer Überprüfungen.
‫Okay?
‫Erstellen Sie also
‫die Controller-Datei, erstellen Sie dort die
‫Controller-Funktionen und erstellen Sie dann auch die Routen in Ihrer Review-Routen-Datei.
‫Und dann am Ende natürlich einige neue Bewertungen erstellen
‫und diese auch mit Get all reviews
‫aus der Datenbank abrufen.
‫Gut.
‫Also bitte pausiere das Video jetzt und mach dich an die Arbeit.
‫Gut.
‫Und nun bin ich an der Reihe, dies auch tatsächlich umzusetzen,
‫und ich fange mit den Controller-Funktionen an.
‫Genau hier erstellen
‫wir also den Review Controller dot
‫js, dann fangen wir natürlich damit an, den Review zu verlangen.
‫Also eine Stufe höher, dann Modelle, dann Review-Modell.
‫Holen Sie sich also alle Bewertungen, und wir verwenden
‫den gleichen Namen wie immer.
‫Rechts?
‫Dann wissen wir bereits,
‫dass dies eine asynchrone Funktion sein wird, da wir
‫es hier mit
‫der Datenbank zu tun haben, und außerdem müssen wir diese
‫gesamte Funktion in die catch-Async-Funktion einschließen.
‫Fangen Sie also Async an, ich glaube, so wird es genannt.
‫Benötigen.
‫Gut.
‫Und jetzt holen wir einfach alle Bewertungen mit await ab
‫und dann nur eine einfache Suche ohne Filter.
‫Ein Status von 200 und dann an normales JSON zurücksenden.
‫Status als Erfolg.
‫Wir definieren auch
‫die Ergebniseigenschaft mit der Punktlänge der Bewertungen
‫und natürlich dann die Daten selbst.
‫Speichern Sie hier und jetzt auf den nächsten.
‫Erstellen Sie also eine Bewertung.
‫Gut.
‫Und Sie beginnen hier
‫zu sehen, dass wir tatsächlich viel doppelten Code erstellen.
‫Das alles sieht hier also im
‫Grunde genauso aus wie für die Benutzer und
‫für die Touren.
‫Rechts?
‫Und tatsächlich werden wir dies
‫etwas später in diesem Abschnitt beheben.
‫Aber im Moment möchte ich wirklich nur, dass es funktioniert.
‫Okay?
‫Machen Sie sich also vorerst keine Sorgen, all diesen
‫doppelt aussehenden Code zu schreiben.
‫Okay.
‫Also nennen wir dies hier New
‫Review, und dann verwenden wir wie immer Dot Create mit allen
‫Daten, die vom Körper eingehen.
‫Okay?
‫Wenn es also Felder im Hauptteil gibt, die
‫nicht im Überprüfungsschema
‫enthalten sind, werden sie einfach ignoriert.
‫Aus diesem Grund ist
‫es sicher, dies beim Erstellen einer
‫neuen Ressource einfach so zu tun.
‫Gut?
‫Wie auch immer, senden wir es jetzt wie immer an den Client zurück.
‫Also mit einem Status von 201
‫für erstellt und Review sollte das neue
‫Review sein.
‫Gut.
‫Eigentlich ohne den Doppelpunkt, Semikolon und so ja.
‫Das sind alles Controller.
‫Kommen wir nun zur Route.
‫Überprüfen Sie
‫also Routes dot js.
‫Und hier beginnen
‫wir natürlich mit der Anforderung unseres
‫Controllers und den Controllern und
‫überprüfen Controller dot js.
‫Als nächstes müssen wir unseren Router erstellen.
‫Also Express, und natürlich müssen wir hier
‫auch Express importieren.
‫Also lass uns das tun, bevor wir etwas anderes tun.
‫Ausdrücken.
‫Also dot Router, und ich denke, so funktioniert es.
‫Und jetzt
‫Router und definieren Sie unsere
‫Route und dies ist wieder im Grunde die Route der Bewertungen.
‫Okay.
‫Denn denken Sie daran, wie
‫wir im nächsten
‫Schritt diesen Router tatsächlich in API-Slash-Reviews einbinden werden.
‫Okay?
‫So wie wir es mit den Touren und den Benutzern gemacht haben.
‫Und das sollten wir eigentlich tun, bevor wir etwas anderes tun.
‫Okay?
‫Also nur, um diese Verwirrung zu beseitigen,
‫die Sie möglicherweise haben.
‫Lassen Sie uns den Router von hier aus exportieren.
‫Okay?
‫Und so können wir jetzt zu
‫app dot js übergehen.
‫Und dann natürlich unseren Router hier importieren.
‫Und
‫verlangen, überprüfen Routen.
‫Okay?
‫Und so kommen wir jetzt hier
‫runter und montieren diesen Router auf einem neuen Weg.
‫Und dieser Weg wird
‫wie gesagt der API-Slash V1-Slash-Review
‫sein.
‫Okay.
‫Und so ist dieser
‫Router, den wir jetzt angeben, im Grunde eine
‫Middleware, die wir auf diesem Pfad mounten.
‫Okay?
‫Immer wenn es also
‫eine Anfrage mit einer URL gibt, die so
‫beginnt, wird diese Middleware-Funktion hier
‫grundsätzlich aufgerufen.
‫Und das ist dann
‫unser Router und da drin nur
‫die Slash-Route, also nur die Wurzel
‫im Grunde wird dann diese API V1 Reviews sein.
‫Okay?
‫Also genau wie wir es gemacht haben, bevor wir die anderen beiden Ressourcen haben.
‫Also Tour Model, da haben wir nicht gearbeitet.
‫Wir arbeiteten an der Bewertung von Routen.
‫Okay.
‫Also haben wir eine Route angegeben.
‫Lassen Sie uns nun die Methode angeben, für
‫die wir unsere Funktion angeben.
‫Also haben wir bekommen, und
‫dafür haben wir
‫die Rezension verwendet oder wir haben sie tatsächlich
‫umgeschrieben.
‫Und dann haben wir auch noch
‫Post für Review erstellen.
‫Okay?
‫Sparen Sie.
‫Und eigentlich möchten wir, dass nur authentifizierte
‫Benutzer Bewertungen abgeben können.
‫Und auch nur Benutzer, die tatsächlich regelmäßige Benutzer sind.
‫Also keine Administratoren und auch keine Reiseleiter.
‫Okay?
‫Wie können wir das also umsetzen?
‫Erinnern wir uns an unseren Abschnitt zur Authentifizierung.
‫Also beginnen wir damit, dass wir unseren Authentifizierungscontroller benötigen.
‫Also nochmal Controller und Authentifizierungscontroller.
‫Und jetzt müssen
‫wir nur noch die Middleware-Funktionen verwenden,
‫die wir dort spezifiziert haben.
‫Erinnern.
‫Also verwenden wir zuerst die Protect-Middleware, also auth Controller dot protect
‫und dies wird
‫es so
‫machen, dass wir diese Route so
‫schützen, dass nur authentifizierte Benutzer darauf zugreifen können.
‫Rechts?
‫Und dann sagen
‫wir im nächsten Schritt, dass wir
‫diese Route einschränken möchten, also verwenden wir unsere
‫Middleware beschränken auf nur Benutzer mit der Rolle des Benutzers.
‫Gut?
‫Also, wir haben das hier schon ein paar Mal gemacht.
‫Und daher an dieser Stelle nicht wirklich etwas Neues.
‫Okay.
‫Ich denke, wir haben alle Schritte befolgt.
‫Wir haben also zunächst ein Modell, mit dem wir
‫neue Dokumente erstellen können.
‫Dann haben wir unsere Controller-Funktionen in
‫unserem Controller definiert, um alle Bewertungen zu erhalten
‫und Bewertungen zu erstellen.
‫Dann haben wir diese Controller-Funktionen oder Handler-Funktionen,
‫wie Sie
‫sie auch nennen können,
‫verwendet, um einige neue Routen zu erstellen.
‫Okay?
‫Und so haben wir eine Route erstellt, um Bewertungen
‫zu erhalten und Bewertungen zu veröffentlichen.
‫Und genau wie zuvor
‫haben wir dies im Grunde in einer Mini-Unteranwendung getan,
‫die nur für Bewertungen gedacht ist.
‫Aus diesem Grund haben wir unseren
‫neuen Router erstellt, den wir dann in unsere Hauptanwendung
‫importiert und auf dieser URL gemountet haben, wo wir auf
‫alles zugreifen möchten, was mit Bewertungen zu tun hat.
‫Gut?
‫Also, lassen Sie uns jetzt wirklich weitermachen und dies testen.
‫Also mach ich weiter,
‫kopiere das und erstelle hier einen neuen
‫Tab
‫und hier sind
‫es Rezensionen und natürlich Post.
‫Gut.
‫Was müssen wir also eigentlich angeben, um
‫eine neue Bewertung zu veröffentlichen?
‫Wir brauchen also die Rezension selbst.
‫Erinnern.
‫Sagen wir also "erstaunliche Tour",
‫dann die Bewertung
‫und ich gebe hier fünf,
‫und dann die Tour und die Benutzer-ID.
‫Okay?
‫Und so brauchen wir jetzt die ID einer der Touren.
‫Okay?
‫Also lasst uns die erste richtige Tour
‫hier verwenden, sagen wir, also lasst uns diesen Meeresforscher benutzen.
‫Gut?
‫Also,
‫die ID des Meeresforschers und
‫jetzt brauchen wir natürlich auch
‫noch die ID des Benutzers, der die Bewertung abgibt.
‫Und das können
‫wir hier von allen Benutzern abrufen.
‫Und so haben wir eigentlich nur einen Benutzer,
‫der ein normaler Benutzer ist.
‫Also dieser Jonas hier und so holen wir uns diese ID.
‫Gut?
‫Denken Sie jetzt daran, dass
‫dieser Benutzer tatsächlich angemeldet sein muss.
‫Okay?
‫Und so erhalten wir
‫etwas später dann tatsächlich automatisch die Benutzer-ID des
‫bereits eingeloggten Benutzers.
‫Denken Sie daran, dass wir dies tun können, da die
‫Protect-Middleware den Benutzer auf das Anforderungsobjekt setzt.
‫Erinnere dich daran?
‫Aber vorerst wollte ich es hier einfach
‫halten, und so müssen
‫wir bei der aktuellen Implementierung tatsächlich auch die Benutzer-ID angeben.
‫Okay?
‫Trotzdem müssen wir uns als normaler Benutzer anmelden,
‫da wir diese Route geschützt haben.
‫Erinnere dich daran?
‫Also lassen Sie uns einfach ein paar davon schließen.
‫Okay?
‫Und logge dich hier ein.
‫Und das tun wir als, also hallo dot Jonas bei IO
‫so hallo.
‫Und sein Passwort ist wahrscheinlich und ich hoffe, es
‫ist immer noch dasselbe.
‫Und eigentlich ist es nicht so, versuchen wir es mit einem neuen Passwort, denn
‫ich erinnere mich, dass ich dieses verwendet habe, als wir Passwörter geändert haben.
‫Funktioniert immer noch nicht, also erstellen wir tatsächlich
‫einen neuen Benutzer.
‫Okay?
‫Natürlich könnten wir an dieser Stelle das Passwort zurücksetzen, aber das ist
‫ein bisschen zu viel
‫Arbeit und deshalb werde ich einfach einen neuen Benutzer
‫erstellen, damit es einfacher ist, es jetzt einfach zu testen.
‫Okay?
‫Verwenden wir also test bei Jonas dot IO und
‫der Name hier wird test user sein.
‫Gut.
‫Oh, und wir haben diese E-Mail-Adresse bereits in unserer Datenbank und das
‫ist seltsam.
‫Wir haben Benutzer.
‫Vielleicht war es das nicht, wir haben dies nicht richtig aktualisiert.
‫Oh, aber vielleicht ist es ein gelöschter Benutzer.
‫Also ein Benutzer, der nicht mehr aktiv
‫ist und deshalb hier nicht auftaucht.
‫Schauen wir uns das einfach im Kompass an.
‫Und natürlich werden Sie
‫im Entwicklungsmodus ständig auf diese Art von Problemen stoßen.
‫Also hier, testet Jonas, und wie ich schon sagte,
‫es ist tatsächlich einer dieser gelöschten Benutzer.
‫Also aktiv auf false gesetzt.
‫Versuchen wir es also noch einmal.
‫Also auch hier einfach User testen.
‫Also jetzt abschicken und jetzt sind wir eingeloggt.
‫Und jetzt kopiere ich die ID dieses neuen Benutzers, um diese
‫neue Bewertung zu erstellen.
‫Gut?
‫Lassen Sie es uns
‫jetzt senden, und wir erhalten natürlich die Fehlermeldung, dass Sie
‫nicht angemeldet sind, da wir
‫unser JSON-Webtoken tatsächlich nicht bereitgestellt haben.
‫Wir müssen also zur Autorisierung kommen,
‫dann den Inhaber-Token und
‫dann natürlich diesen.
‫Also, wenn wir das jetzt noch einmal
‫versuchen, dann geht es los.
‫Okay.
‫Lassen Sie uns eine andere für eine
‫andere Tour erstellen, diesmal
‫für
‫die nächste, also für Forrest Hiker.
‫Kopieren Sie also auch hier die ID.
‫Ja.
‫Hier wird der Benutzer derselbe sein, aber eine andere Tour.
‫Geben wir ihm vier Sterne.
‫Und sagen wir einfach "hat es geliebt. „Etwas
‫ganz Einfaches und Okay.
‫Speichern Sie das, und
‫ich werde hier einen neuen
‫Ordner für die Bewertungen erstellen und
‫natürlich ist
‫hier etwas schief gelaufen.
‫Wo ist dieser Ordner?
‫Mm.
‫Es ist nirgendwo wirklich, also erstellen wir es einfach hier.
‫Und wir können den Namen hier oben auch tatsächlich ändern.
‫Erstellen Sie
‫also eine neue Bewertung.
‫Okay.
‫Und jetzt wollen wir auch alle Bewertungen bekommen.
‫Also brauchen wir diese beiden nicht mehr.
‫Okay und das ist wirklich ein
‫GET, und speichern wir es auch in Bewertungen.
‫Holen Sie sich alle Bewertungen.
‫Und das sollte genug sein, um uns anzufangen und
‫wirklich alle unsere Bewertungen zu sehen.
‫Okay, und los geht's.
‫Lassen Sie uns einen Blick auf den Kompass
‫werfen, und um die Bewertungen hier zu
‫sehen, müssen wir die gesamte
‫Datenbank neu laden, aber jetzt, wenn wir hier zu Bewertungen
‫kommen, sehen wir tatsächlich unsere beiden Bewertungen, die ebenfalls erstellt wurden.
‫Okay.
‫Wie schaffen wir es
‫nun, dass wir hier tatsächlich den Benutzer und die
‫Tourdaten sehen und nicht nur die IDs?
‫Nun, natürlich müssen wir wieder populate verwenden.
‫Rechts?
‫Und genau das werden wir im
‫nächsten Video tun.