‫Sprecher: Ein weiteres äußerst wichtiges Merkmal
‫einer guten API ist die Bereitstellung von Paginierung.
‫Im Grunde erlaubt es
‫dem Benutzer also, nur eine bestimmte Seite unserer Ergebnisse
‫auszuwählen, falls wir viele Ergebnisse haben.
‫Nehmen wir also an, wir
‫haben zum Beispiel 1000 Dokumente in einer bestimmten Sammlung.
‫Und wir sagen, dass wir auf jeder Seite 100 Dokumente haben.
‫Das würde also bedeuten, dass wir 10 Seiten haben, oder?
‫10 mal 100 ist also 1000.
‫Auf dieser Grundlage können wir die Paginierung
‫mithilfe einer Abfragezeichenfolge implementieren?
‫Nun, wir werden die Seiten- und Trennfelder verwenden.
‫Es wird also ein Seitenfeld geben.
‫Nehmen wir an, wir wollen Seite zwei und
‫es wird ein Limit-Feld geben.
‫Und diese Grenze hier bedeutet im Wesentlichen die Anzahl
‫der Ergebnisse, die wir pro Seite haben möchten.
‫Und das ist hier eigentlich nur auf 10 gesetzt
‫und das müssen wir hier natürlich korrigieren.
‫Es ist kein Komma, sondern ein und.
‫Also Seite zwei und das Limit 10.
‫Zurück zum Beispiel von 1000 Ergebnissen, wenn das
‫Limit 10 ist, also nur 10 Ergebnisse pro Seite,
‫dann haben wir 100 Seiten und
‫hier zeigen wir dann die Seite Nummer 2
‫dieser 100 Seiten an.
‫Okay?
‫Jetzt brauchen wir jetzt eine Möglichkeit, dies mit Mongoose zu implementieren.
‫Schauen wir uns also an, wie wir das erreichen können, indem
‫wir zu unserem Code zurückkehren.
‫Also Feature Nummer vier,
‫Pagination.
‫In Ordnung,
‫und ich beginne mit der Erstellung einer Beispielabfrage hier,
‫genau wie wir es zuvor getan haben.
‫Nehmen wir an, die Abfrage ist gleich Abfrage.
‫Und was haben wir nun für Methoden,
‫um die Paginierung zu implementieren?
‫Nun, das Nützlichste ist überspringen und ich
‫werde gleich erklären, was es tut, also lasst uns
‫hier einfach eine Zufallszahl eingeben.
‫Also überspringen und begrenzen, und setzen
‫wir 10.
‫Daher ist dieser Grenzwert hier tatsächlich genau derselbe wie der
‫Grenzwert, den wir in der Abfragezeichenfolge definiert haben.
‫Also im Grunde die Menge an Ergebnissen, die
‫wir in der Abfrage haben wollen.
‫Und dann überspringen, das wir hier haben, ist die Menge an
‫Ergebnissen, die übersprungen werden sollten, bevor Daten tatsächlich abgefragt werden.
‫Alles klar, auch hier ist dies nur ein Platzhalter.
‫Kehren wir zu diesem Beispiel zurück, das wir hier haben.
‫Ich kopiere einfach diese Abfragezeichenfolge hierher.
‫Nehmen wir an, der Benutzer möchte Seite Nummer
‫zwei mit 10 Ergebnissen pro Seite.
‫Das bedeutet, dass die Ergebnisse 1 bis 10 auf Seite 1
‫und 11 bis 20 auf Seite 2 stehen.
‫Okay, das bedeutet also, dass wir 10 Ergebnisse überspringen möchten,
‫bevor wir tatsächlich mit der Abfrage beginnen.
‫Okay.
‫Also wieder eins bis 10 für
‫Seite eins und dann
‫11 bis 20 für Seite zwei und
‫so weiter
‫und so weiter.
‫21 bis 30 werden also Seite drei sein und so
‫weiter und so weiter.
‫Wir müssen also 10 Ergebnisse
‫überspringen, um zu Ergebnis Nummer 11 zu gelangen, oder?
‫Also zu Ergebnis Nummer 11, die das erste auf Seite zwei ist.
‫Okay, und da Seite 2 angefordert wurde, müssen
‫wir wieder 10 Ergebnisse überspringen, bevor wir
‫mit Seite 2 beginnen.
‫Okay? Sinn ergeben?
‫Und wenn wir zum Beispiel Seite Nummer drei angefordert
‫hätten, dann müssten natürlich zuerst
‫20 Ergebnisse übersprungen werden.
‫Daher benötigen wir
‫hier eine Möglichkeit, diesen Sprungwert zu berechnen.
‫Also im Wesentlichen basierend auf der Seite und dem Limit.
‫Jetzt fragen Sie sich vielleicht, warum ich nicht direkt nach
‫dem Skip-Wert in der Abfragezeichenfolge frage, aber
‫das liegt daran, dass dieser Wert hier für den
‫Benutzer irgendwie abstrakt ist, okay?
‫Es ist viel einfacher, einfach zu sagen: "Nun, ich möchte Seite Nummer eins", oder ich
‫möchte Seite Nummer fünf" oder ich
‫möchte Seite Nummer 10. " Okay,
‫für den Benutzer ist es also viel einfacher, sich
‫hier nicht mit Skip-Werten und dem ganzen
‫Zeug zu beschäftigen, der Benutzer möchte es einfach
‫haben und einfach eine Seite definieren.
‫Bevor wir nun tatsächlich mit
‫der Berechnung des Skip-Werts beginnen können, müssen wir zuerst die Seite
‫und das Limit aus der Abfragezeichenfolge
‫abrufen und wir sollten auch einige Standardwerte definieren.
‫Okay, das liegt im Grunde
‫daran, dass wir die Paginierung immer noch
‫haben möchten, auch wenn der Benutzer keine Seite
‫oder kein Limit angibt.
‫Denn sagen wir zum Beispiel, wir haben eine Million
‫Ergebnisse in unserer Datenbank,
‫und dann würden wir natürlich, wenn der
‫Benutzer die Anfrage macht, nicht einfach alle diese 10 Millionen Ergebnisse anzeigen.
‫Das wäre nicht sehr benutzerfreundlich, oder?
‫Also definiere ich standardmäßig die Seite Nummer eins und
‫ein Limit von sagen wir 100.
‫Wenn ein Benutzer in diesem Beispiel alle Touren anfordert,
‫bekommt er also standardmäßig nur 100 und
‫keine Million, in Ordnung?
‫So ist die Seite natürlich fordernd. Anfrage. page und ich werde
‫es jetzt mit eins multiplizieren, was nur
‫ein netter Trick ist, um eine
‫Zeichenfolge in eine Zahl umzuwandeln.
‫Okay, vielleicht haben Sie vorher bemerkt, dass jedes Mal, wenn
‫wir tatsächlich eine Zahl in eine
‫Abfragezeichenfolge einfügen, es dann eine Zeichenfolge oder ein Abfrageobjekt
‫ist, und wir müssen dies einfach durch Multiplizieren mit eins beheben.
‫Okay, und dann wollen wir standardmäßig die Seite Nummer eins.
‫Gut?
‫Dies ist also eine schöne
‫Möglichkeit in JavaScript, um grundsätzlich Standardwerte zu definieren.
‫Und das ist Ihnen sicher bekannt, oder?
‫Wie auch immer, das Limit ist auf Anfrage. Anfrage. Limit mal wieder
‫eins um es umzuwandeln, oder
‫die Vorgabe von 100 die wir eben erwähnt haben.
‫Im Idealfall wird der Benutzer also nur die Seitenzahl angeben, die
‫er verlangt, und
‫sich nicht einmal um die Seitenbegrenzung kümmern.
‫Das ist für spezifischere Anwendungsfälle.
‫Okay, und jetzt müssen wir nur noch so definieren, um im Grunde
‫den Sprungwert
‫zu berechnen, über den wir gerade hier gesprochen haben.
‫Und das geht am besten, wenn man auf ein Beispiel zurückgreift.
‫Nehmen wir noch einmal an, wir fordern Seite Nummer drei mit
‫einer Beschränkung von 10 an.
‫und wir sehen hier für Seite Nummer drei die Ergebnisse
‫von 21 bis 30.
‫Es beginnt also bei Ergebnisnummer 21, was bedeutet, dass wir
‫20 Ergebnisse überspringen müssen.
‫Und 20 Ergebnisse sind im Grunde zweimal 10,
‫also das Zweifache dieser Grenze.
‫Okay, und von dort aus fangen wir tatsächlich an, eine Formel zu bekommen.
‫Zwei mal zehn ist also im Grunde drei minus eins mal 10.
‫Und drei ist die Seite, auf der wir sind.
‫Das ist also unsere Formel.
‫Also Seite minus Eins und
‫somit die vorherige Seite
‫mal das
‫Limit.
‫Okay, ich hoffe, das hat Sinn gemacht, lassen
‫Sie uns diese Werte jetzt hier ersetzen.
‫Überspringen
‫und Begrenzung des Limits.
‫Okay?
‫Im Grunde sind diese Zahl hier also alle Ergebnisse, die
‫vor der Seite stehen, die wir jetzt tatsächlich anfordern.
‫Wenn wir also Seite Nummer drei anfordern, beginnen
‫unsere Ergebnisse bei Seite Nummer 21.
‫Also wollen wir vorher 20 Ergebnisse überspringen.
‫Und 20 Ergebnisse sind,
‫weil wir 2 Seiten mit jeweils 10 Ergebnissen haben.
‫Ja, es wird die Seite sein, die wir gerade angefordert haben.
‫Also Seite hier, minus eins, also
‫die vorherige Seite mal die Anzahl der Ergebnisse auf
‫jeder Seite.
‫Okay, so viele Dokumente werden
‫übersprungen.
‫Okay, ich hoffe, das war sinnvoll.
‫Lassen Sie uns nun weitermachen und dies tatsächlich versuchen.
‫Und da wir hier nur so wenige Ergebnisse haben, müssen
‫wir es mit einer wirklich kleinen Grenze testen.
‫Nehmen wir also an, wir wollen nur drei Ergebnisse pro Seite, und fangen wir
‫tatsächlich mit Seite Nummer eins an.
‫Also absenden, und tatsächlich bekommen wir jetzt nur drei
‫Ergebnisse, wie Sie hier sehen können.
‫Also diese drei, mal sehen.
‫Also The Forest Hiker, The
‫Sea Explorer und The
‫City Wanderer.
‫Okay?
‫Versuchen wir es mit Seite Nummer
‫zwei, und aus irgendeinem Grund springt der Postbote
‫jedes Mal herum, wenn ich die URL ändere.
‫Wie auch immer, jetzt haben wir The
‫Park Camper, The Snow
‫Adventurer und The Sports Lover.
‫Sie sehen also, dass
‫wir jetzt tatsächlich verschiedene Touren haben.
‫Okay?
‫Und so können wir sagen, dass unsere
‫Paginierung hier bereits funktioniert.
‫Jetzt die letzte Seite,
‫und wir haben jetzt The Northern Lights,
‫The Wine
‫Taster und The Star Gazer.
‫Gut?
‫Was ist nun, wenn wir versuchen, auf Seite Nummer vier zu gehen?
‫Wir wissen bereits, dass wir nur
‫neun Touren haben, und so sollte auf Seite vier nichts stehen.
‫Rechts?
‫Lassen Sie uns das also testen.
‫Und tatsächlich bekommen wir null Ergebnisse.
‫Aber das ist natürlich nicht optimal.
‫Okay, und lassen Sie uns das jetzt beheben und
‫im Grunde jedes Mal einen Fehler auslösen, wenn der
‫Benutzer eine Seite auswählt, die nicht existiert.
‫Denn das ist im Grunde die Situation hier.
‫Der Benutzer hat eine Seite angefordert, die einfach nicht existiert.
‫Wir haben nicht genug Ergebnisse, um vier Seiten mit drei Ergebnissen
‫zu haben.
‫Lassen Sie uns das jetzt tun,
‫und dies wird
‫tatsächlich nur passieren, wenn es eine Seite für
‫die Abfrage gibt, und lassen Sie uns diese if-Anweisung hier erstellen.
‫Also auf Anfrage. Anfrage. Seite, nur in
‫diesem Fall testen wir, ob wir mehr
‫Touren überspringen, als wir tatsächlich haben.
‫Kommen wir also zur Anzahl der Touren.
‫Die Anzahl der Touren ist also gleich, und jetzt werden
‫wir tatsächlich eine neue Methode lernen.
‫Es gibt also eine neue
‫Methode im Tour-Modell, die countDocuments genannt wird.
‫Okay? Und wie der Name schon
‫sagt, wird dies die Anzahl der Dokumente zurückgeben, in Ordnung?
‫Eigentlich wird es ein Versprechen zurückgeben, aber
‫wir warten dann auf das Versprechen
‫und so wird es dann
‫mit dem Ergebnis der Anzahl der Touren zurückkommen.
‫Okay? Wenn also die Anzahl der Dokumente,
‫die wir überspringen, größer ist als die Anzahl der tatsächlich
‫vorhandenen Dokumente, bedeutet dies, dass die Seite nicht existiert, in Ordnung?
‫Das macht Sinn?
‫Wenn also skip größer ist als die
‫Anzahl der Touren, und
‫jetzt werde ich hier einen neuen Fehler ausgeben.
‫Okay?
‫Also neuen
‫Fehler werfen, diese Seite existiert nicht.
‫Warum werfe ich jetzt hier einen Fehler?
‫Nun, einfach, weil wenn ich
‫hier in dem Triblock, in dem wir
‫uns gerade
‫befinden, einen Fehler werfe, wird er automatisch
‫und sofort zum Catch-Block übergehen und dann diese 404-Fehlermeldung zurücksenden.
‫Okay?
‫Und das ist es, was wir jetzt wollen.
‫Denken Sie nur daran, dass wir etwas später im Kurs
‫eine viel bessere Fehlerbehandlung implementieren werden.
‫Und eigentlich gleich im nächsten Abschnitt, okay?
‫Aber lassen Sie es uns vorerst einfach
‫halten. Geben Sie diesen Fehler hier
‫aus, falls wir versuchen, mehr Dokumente zu überspringen, als
‫wir tatsächlich haben.
‫Okay?
‫Dies ist also der richtige Fall, senden wir ihn hierher
‫und das ist nicht das Ergebnis, das ich erwartet
‫hatte, also gehen wir
‫zurück, also jetzt ist unsere Seite vier
‫und das Limit ist drei.
‫Der Sprung hier wäre also dreimal drei, also neun, okay?
‫Und die Anzahl der Touren ist auch neun,
‫also ist skip nicht größer als die Anzahl der Touren und
‫daher erhalten wir diesen Fehler nicht.
‫Was wir also tun müssen, ist, ihn auf größer oder gleich zu setzen.
‫Okay, und das sollte jetzt funktionieren.
‫Und das dauert lange, und das
‫tat es.
‫Jetzt bekommen wir hier den Fail-Status und
‫einen 404.
‫Aus irgendeinem
‫Grund wird dieser Fehler hier nicht angezeigt,
‫was er eigentlich sollte.
‫Aber keine Sorge, das ist nicht wirklich wichtig.
‫Wichtig ist, dass es tatsächlich in unseren Catch-Block eingetreten
‫ist und dann diese 404-Antwort zurückgesendet hat.
‫Alles andere werden wir etwas später implementieren.
‫Okay, und das ist es tatsächlich.
‫Das sind also alle Methoden, die wir unserer Abfrage
‫hinzufügen werden, und wenn wir hier endlich die nächste
‫Codezeile erreichen, wird unsere
‫Abfrage erwartet und mit den Touren zurückgegeben.
‫Okay, und an dieser Stelle könnte unsere Abfrage
‫tatsächlich so aussehen,
‫also ungefähr so, ungefähr was
‫haben
‫wir hier haben wir sortieren, auswählen,
‫also haben wir
‫möglicherweise sortieren, und dann
‫einige auswählen dort haben
‫wir auch
‫überspringen wir haben limit auch,
‫und das ist wirklich eine große Abfrage.
‫Und noch einmal, was uns erlaubt ist,
‫dass jede dieser Methoden hier immer eine neue Abfrage zurückgibt,
‫die wir dann mit der nächsten Methode und der
‫nächsten Methode
‫verketten können, und die nächste Methode, bis wir endlich auf die Abfrage
‫warten, damit sie es kann Geben Sie uns tatsächlich unsere Dokumente.
‫Okay, also lass uns all diese Kommentare loswerden und
‫ja, das war's für den Moment.
‫Für diese Funktionen werden wir in der nächsten Vorlesung
‫nur noch eine hinzufügen,
‫aber diese wird ein bisschen anders sein als diese.
‫Es wird keine dieser Abfragemethoden verwenden, in Ordnung?
‫Ich hoffe also, dass Sie in den letzten
‫paar Vorlesungen wirklich die
‫Besonderheiten der Datenabfrage mit Mongoose kennengelernt haben.
‫Natürlich sind all diese Methoden, die wir verwendet haben,
‫nicht nur für diese Funktionen nützlich, die wir hier implementiert haben.
‫Sie können wirklich alle Arten von
‫Abfragen erstellen, die Sie sich für alle Arten von Anwendungen vorstellen können.
‫Ich habe Ihnen hier alle Techniken dieser
‫verschiedenen API-Funktionen in diesem Zusammenhang gezeigt,
‫aber Sie können sie
‫in Zukunft natürlich in allen Ihren Anwendungen verwenden, okay?
‫Also ich hoffe das hat dir
‫Spaß gemacht und wenn ja, dann lass uns jetzt gleich zum nächsten übergehen.
‫Mach's gut!