‫Narrateur : Une autre caractéristique extrêmement importante
‫d'une bonne API est de fournir une pagination.
‫Donc, en gros, permettre
‫à l'utilisateur de ne sélectionner qu'une certaine page de nos résultats,
‫au cas où nous aurions beaucoup de résultats.
‫Supposons donc que nous ayons,
‫par exemple, 1000 documents dans une certaine collection.
‫Et nous disons que sur chaque page nous avons 100 documents.
‫Cela voudrait donc dire que nous aurions 10 pages, n'est-ce pas ?
‫Donc 10 fois 100 font 1000.
‫Et donc sur cette base, comment allons-nous implémenter la pagination à
‫l'aide d'une chaîne de requête ?
‫Eh bien, nous allons utiliser les champs page et délimiter.
‫Il y aura donc un champ de page.
‫Disons que nous voulons la page deux et
‫qu'il y aura un champ limite.
‫Et cette limite ici signifie essentiellement la quantité
‫de résultats que nous voulons par page.
‫Et ce n'est en fait réglé ici qu'à 10 et
‫bien sûr, nous devons corriger celui-ci ici.
‫Ce n'est pas une virgule, mais un et.
‫Donc la page deux et la limite 10.
‫Revenons maintenant à l'exemple de 1000 résultats, si la
‫limite est de 10, donc seulement 10 résultats par page,
‫alors nous aurons 100 pages et
‫ici nous affichons alors la page numéro 2
‫de ces 100 pages.
‫D'accord?
‫Maintenant, nous avons besoin maintenant d'un moyen d'implémenter cela en utilisant Mongoose.
‫Voyons donc comment nous pourrions le faire en
‫revenant à notre code.
‫Donc fonction numéro quatre,
‫Pagination.
‫Très bien,
‫et je vais commencer par créer un exemple de
‫requête ici, comme nous l'avons fait auparavant.
‫Disons donc que la requête est une requête égale.
‫Et maintenant, quel genre de méthodes avons-nous
‫pour implémenter la pagination ?
‫Eh bien, le plus utile est de sauter et
‫je vais expliquer ce qu'il fait dans une seconde, alors
‫mettons juste un nombre aléatoire ici.
‫Alors sautez et limitez, et
‫mettons 10.
‫et donc cette limite ici est en fait exactement la même que la
‫limite que nous avons définie dans la chaîne de requête.
‫Donc, fondamentalement, la quantité de résultats que
‫nous voulons dans la requête.
‫Et puis sauter, que nous avons ici, est la quantité de
‫résultats qui doivent être ignorés avant d'interroger réellement les données.
‫Très bien, encore une fois, ce n'est qu'un espace réservé ici.
‫Revenons à cet exemple que nous avons ici.
‫Je vais juste copier cette chaîne de requête ici.
‫donc disons que l'utilisateur veut la page numéro
‫deux avec 10 résultats par page.
‫Cela signifie que les résultats 1 à 10 sont sur la première page
‫et 11 à 20 sur la page 2.
‫D'accord, ce que cela signifie, c'est que nous voulons sauter
‫10 résultats avant de commencer à interroger.
‫D'accord.
‫Encore une fois, un à 10
‫correspond à la première page,
‫puis 11 à 20 à la deuxième
‫page, et
‫ainsi de suite.
‫Donc, 21 à 30 seront la page trois, et
‫ainsi de suite.
‫Et donc nous devons sauter
‫10 résultats pour arriver au résultat numéro 11, n'est-ce pas ?
‫Donc au résultat numéro 11 qui sera le premier de la page deux.
‫D'accord, et puisque c'est la page deux qui a été demandée, eh
‫bien, encore une fois, nous devons sauter 10 résultats
‫avant de commencer réellement la page deux.
‫D'accord? Avoir du sens ?
‫Et par exemple, si nous demandions la page numéro
‫trois, alors bien sûr, 20 résultats
‫devraient d'abord être ignorés.
‫Et nous aurons donc
‫besoin d'un moyen de calculer cette valeur de saut ici.
‫Donc basé essentiellement sur la page et la limite.
‫Maintenant, vous pouvez vous demander pourquoi je ne demande pas directement
‫la valeur de saut dans la chaîne de
‫requête, mais c'est parce que pour l'utilisateur, cette valeur ici
‫est plutôt abstraite, d'accord ?
‫C'est beaucoup plus facile de dire simplement : "Eh bien, je veux la page numéro un", ou je
‫veux la page numéro cinq "ou je
‫veux la page numéro 10. " D'accord,
‫donc pour l'utilisateur, il est beaucoup plus facile de ne
‫pas gérer les valeurs de saut ici
‫et tout le reste, l'utilisateur veut que ce soit
‫facile et qu'il définisse simplement une page.
‫Maintenant, avant de pouvoir réellement
‫commencer à calculer la valeur de saut, nous devons d'abord obtenir la page
‫et la limite de la chaîne de requête
‫et nous devons également définir des valeurs par défaut.
‫D'accord, c'est essentiellement parce que
‫nous voulons toujours avoir la pagination
‫même si l'utilisateur ne spécifie aucune page
‫ou aucune limite.
‫Parce que, par exemple, disons que nous avons un million
‫de résultats dans notre
‫base de données, et bien sûr, lorsque l'utilisateur fait
‫la demande, nous ne montrerons pas simplement tous ces 10 millions de résultats.
‫Ce ne serait pas très convivial, n'est-ce pas ?
‫Et donc, je vais définir par défaut la page numéro
‫un et une limite de disons 100.
‫Ainsi, par défaut, lorsqu'un utilisateur demande toutes les visites de
‫cet exemple, il n'en obtient que 100, et
‫non un million, d'accord ?
‫Donc la page est bien sûr demande. mettre en doute. page et je vais
‫maintenant la multiplier par un, ce qui
‫est juste une bonne astuce pour
‫convertir une chaîne en nombre.
‫D'accord, alors peut-être avez-vous déjà remarqué qu'à chaque fois que nous insérons
‫un nombre dans une chaîne de
‫requête, ce sera alors une chaîne ou un objet de
‫requête, et nous devons donc corriger cela simplement en multipliant par un.
‫D'accord, et puis par défaut, nous voulons la page numéro un.
‫D'accord?
‫Et c'est donc un bon moyen
‫en JavaScript de définir fondamentalement les valeurs par défaut.
‫Et je suis sûr que vous le savez, n'est-ce pas ?
‫Quoi qu'il en soit, la limite est sur req. mettre en doute. limitez à nouveau une
‫fois pour le convertir, ou la
‫valeur par défaut de 100 que nous venons de mentionner.
‫Donc, idéalement, l'utilisateur ne spécifiera que le numéro de page qu'il demande
‫et ne se
‫souciera même pas de la limite de page.
‫C'est pour des cas d'utilisation plus spécifiques.
‫D'accord, et maintenant tout ce que nous avons à faire est de définir ensuite
‫pour calculer fondamentalement
‫cette valeur de saut dont nous venons de parler ici auparavant.
‫Et la meilleure façon de le faire est de revenir à un exemple.
‫Encore une fois, disons que nous demandons la page numéro trois,
‫avec une limite de 10.
‫et nous voyons ici pour la page numéro trois les résultats
‫sont de 21 à 30.
‫Cela commence donc au résultat numéro 21, ce qui signifie que
‫nous devons sauter 20 résultats.
‫Et 20 résultats sont fondamentalement deux fois 10,
‫donc deux fois cette limite.
‫D'accord, et à partir de là, nous commençons à obtenir une formule.
‫Donc, deux fois dix, c'est fondamentalement trois moins un fois 10.
‫Et trois est la page sur laquelle nous sommes.
‫C'est donc notre formule.
‫Donc page moins un et donc
‫la page précédente, en gros,
‫multipliée par
‫la limite.
‫D'accord, j'espère que cela a du sens,
‫remplaçons maintenant ces valeurs ici.
‫Sauter
‫et limite de limite.
‫D'accord?
‫Donc, fondamentalement, ce nombre ici correspond à tous les résultats
‫qui précèdent la page que nous demandons actuellement.
‫Encore une fois, si nous demandons la page numéro trois,
‫nos résultats commenceront à la page numéro 21.
‫Et donc nous voulons sauter 20 résultats avant cela.
‫Et donc 20 résultats,
‫c'est parce que nous avons 2 pages avec 10 résultats sur
‫chacune, Ouais, ça va être la page que nous venons de demander.
‫Donc page ici, moins un, donc
‫la page précédente multiplie le nombre de résultats sur
‫chaque page.
‫D'accord, c'est donc le nombre de documents qui
‫vont être ignorés.
‫Bon, j'espère que ça a du sens.
‫Allons de l'avant et essayons réellement ceci.
‫Et comme nous n'avons que si peu de résultats ici, nous
‫devons le tester avec une très petite limite.
‫Disons donc que nous ne voulons que trois résultats par page, et commençons en
‫fait à la page numéro un.
‫Alors envoyez-le, et en effet maintenant nous n'obtenons que trois
‫résultats comme vous pouvez le voir ici.
‫Alors ces trois, voyons.
‫Ainsi, The Forest Hiker, The
‫Sea Explorer et The
‫City Wanderer.
‫D'accord?
‫Essayons la page numéro deux, et
‫pour une raison quelconque, le facteur n'arrête pas
‫de sauter chaque fois que je modifie l'URL.
‫Quoi qu'il en soit, nous avons maintenant The
‫Park Camper, The Snow
‫Adventurer et The Sports Lover.
‫Vous commencez donc à voir
‫que nous avons maintenant différentes tournées.
‫D'accord?
‫Et donc nous pouvons en quelque sorte dire que
‫notre pagination ici fonctionne déjà.
‫Maintenant la dernière page,
‫et nous avons maintenant The Northern Lights,
‫The Wine
‫Taster et The Star Gazer.
‫D'accord?
‫Et si nous essayions d'aller à la page numéro quatre ?
‫Nous savons déjà que nous n'avons que neuf tournées,
‫et donc à la page numéro quatre, il ne devrait rien y avoir.
‫Droit?
‫Alors testons ça.
‫Et en effet, nous obtenons des résultats nuls.
‫Mais ce n'est bien sûr pas idéal.
‫D'accord, alors allons-y maintenant et corrigeons cela et générons
‫en quelque sorte une erreur chaque fois que
‫l'utilisateur sélectionne une page qui n'existe pas.
‫Parce que c'est fondamentalement la situation ici.
‫L'utilisateur a demandé une page qui n'existe tout simplement pas.
‫Nous n'avons pas assez de résultats pour avoir quatre pages avec
‫trois résultats.
‫Faisons-le maintenant, et cela ne se
‫produira en fait
‫que s'il y a une page sur
‫la requête et créons donc cette instruction if ici.
‫Donc si demande. mettre en doute. page, seulement dans
‫ce cas, nous testerons si nous sautons plus
‫de visites que nous n'en avons réellement.
‫Voyons donc le nombre de visites.
‫Donc le nombre de tours est égal à, et maintenant nous allons
‫en fait apprendre une nouvelle méthode.
‫Il existe donc une nouvelle méthode
‫sur le modèle Tour qui s'appelle countDocuments.
‫D'accord? Et comme son nom l'indique,
‫cela va renvoyer le nombre de documents, d'accord ?
‫En fait ça va retourner une promesse
‫mais on attend ensuite la promesse
‫et donc ça reviendra
‫avec le résultat du nombre de tournées.
‫D'accord? Et donc si le nombre de
‫documents que l'on saute est supérieur au nombre de documents qui
‫existent réellement alors ça veut dire que la page n'existe pas, d'accord ?
‫C'est logique?
‫Donc, si le saut est supérieur au nombre de
‫tournées, et pour l'instant, ce
‫que je vais faire ici, c'est lancer une nouvelle erreur.
‫D'accord?
‫Alors jetez une
‫nouvelle erreur cette page n'existe pas.
‫Maintenant, pourquoi je lance une erreur ici ?
‫Eh bien, tout simplement parce que si je
‫lance une erreur ici dans le tribloc dans lequel
‫nous nous
‫trouvons actuellement, il passera alors automatiquement et immédiatement
‫au bloc catch, et il renverra alors ce type de message d'échec 404.
‫D'accord?
‫Et c'est ce que nous voulons pour l'instant.
‫Gardez juste à l'esprit que nous allons implémenter une bien meilleure gestion des
‫erreurs un peu plus tard dans le cours.
‫Et en fait juste dans la section suivante, d'accord ?
‫Mais pour l'instant, restons simple, jetons cette
‫erreur ici au cas où
‫nous essaierons de sauter plus de documents que nous
‫n'en avons réellement.
‫D'accord?
‫Donc c'est le bon cas, envoyons-le ici et ce
‫n'est pas le résultat que j'attendais donc revenons en
‫arrière donc en ce
‫moment notre page est à quatre et
‫la limite est à trois.
‫Donc le saut ici serait trois fois trois, donc neuf, d'accord ?
‫Et le nombre de visites est également de neuf
‫et donc le saut n'est pas supérieur au nombre de visites
‫et donc nous n'obtenons pas cette erreur.
‫Donc, ce que nous devons faire, c'est le régler sur supérieur ou égal.
‫D'accord, et cela devrait maintenant fonctionner.
‫Et cela prend beaucoup de temps, et c'est ce
‫qui s'est passé.
‫Maintenant, nous obtenons le statut d'échec ici et
‫un 404.
‫Pour une
‫raison quelconque, cette erreur ne s'affiche pas ici, ce
‫qui devrait être le cas.
‫Mais ne vous inquiétez pas pour ça, ce n'est pas vraiment important.
‫Ce qui compte, c'est qu'il est effectivement entré dans notre bloc
‫catch, puis qu'il a renvoyé cette réponse 404.
‫Tout le reste, nous allons mettre en œuvre un peu plus tard.
‫D'accord, et c'est en fait tout.
‫C'est donc toutes les méthodes que nous allons ajouter à
‫notre requête, et donc lorsque nous atteindrons enfin la ligne de
‫code suivante ici, notre requête
‫sera alors attendue et reviendra avec les visites.
‫D'accord, et à ce stade, notre requête pourrait en
‫fait ressembler à
‫quelque chose comme ça, quelque
‫chose
‫comme bien qu'avons-nous ici nous avons
‫trier, sélectionner, donc
‫nous pourrions avoir trier,
‫puis certains sélectionner là-bas nous
‫avons également
‫sauter nous avons limite aussi,
‫et c'est donc vraiment une grande question.
‫Et encore, ce qui nous permet de faire
‫ça c'est que chacune de ces méthodes ici retournera toujours
‫une nouvelle requête que l'on pourra ensuite enchaîner sur
‫la méthode
‫suivante et la méthode suivante, et la méthode suivante jusqu'à ce qu'on
‫attende enfin la requête pour qu'elle puisse donnez-nous en fait nos documents.
‫D'accord, alors débarrassons-nous de tous ces commentaires et oui,
‫c'est tout pour le moment.
‫Pour ces fonctionnalités, nous allons simplement en ajouter une
‫de plus dans la prochaine
‫conférence, mais celle-ci sera un peu différente de celles-ci.
‫Il n'utilisera pas l'une de ces méthodes de requête, d'accord ?
‫J'espère donc qu'au cours des deux dernières conférences, vous
‫avez vraiment appris les tenants et
‫les aboutissants de l'interrogation de données avec Mongoose.
‫Alors bien sûr, toutes ces méthodes que nous avons utilisées ne
‫sont pas seulement utiles pour ces fonctionnalités que nous avons implémentées ici.
‫Vous pouvez vraiment créer toutes sortes
‫de requêtes que vous pouvez imaginer pour toutes sortes d'applications.
‫Je vous ai donc montré toutes les techniques ici
‫dans ce contexte de ces différentes fonctionnalités
‫d'API, mais bien sûr, vous
‫pourrez les utiliser dans toutes vos applications à l'avenir, d'accord ?
‫J'espère donc que c'était amusant
‫pour vous et si c'était le cas, passons maintenant au suivant.
‫À bientôt!