Faire une pagination avec Sequelize (sur Typescript)

Faire une pagination avec Sequelize (sur Typescript)

L’autre jour, j’ai cherché un moyen pour realizer une pagination avec Sequelize sur Typescript. Il y a beaucoup de tutoriels sur comment vous pouvez calculer l’offset et les numeros de pages. Après que j’ai vu autre plugin, j’ai pensé à une solution similaire.

{
"lastPage": 20,
"totalRecords": 400,
"currentPage": 1,
"hasMorePages": true,
"data": []
}

Ce que j’avais besoin était d’ajouter une pagination en utilisant différents modèles sur Sequelize. Donc, créer une clase et utiliser le pouvoir de strong typing en Typescript, le fichier était prêt à l’emploi. Si on passe le modèle comme type, l’éditeur de code reconnaîtra que data est un array avec le type de données établi. Ensuite ici, le fichier.

import { Model, ModelCtor } from "sequelize-typescript";
import { FindOptions } from "sequelize";
import to from "await-to-js";
export default class Paginator<T extends Model> {
private model: ModelCtor<T>;
constructor(model: ModelCtor<T>) {
this.model = model;
}
async paginate(options: FindOptions, currentPage: number, limitTo: number, optionsForCalculateTotal?: FindOptions) {
const offset = (currentPage - 1) * limitTo;
const [errorTotal, resultsTotal] = await to(this.model.findAll<T>(optionsForCalculateTotal ?? options));
if (errorTotal) {
throw errorTotal;
}
const totalRecords = resultsTotal.length;
const [error, results] = await to(this.model.findAll<T>({ ...options, offset, limit: limitTo }));
if (error) {
throw error;
}
const lastPage = totalRecords > 0 ? Math.ceil(totalRecords / limitTo) : 0;
const hasMorePages = currentPage < lastPage;
return { lastPage, totalRecords, currentPage, hasMorePages, data: results };
}
}

Comme tu peux le voir pour le confort, j’utilise await-to-js, c’est un capteur d’erreurs dans une fonction async, Et tu les peux retourner plutôt que faire un throw. Et, bien sûr, j’utilise le package sequelize-typescript.

Après vous avez copié et installé le fichier où vous voulez, donc vous pouvez l’utiliser dans votre projet.

Les paramètres sont les suivants:

  • Options: Les options du query dans Sequelize. Voici où vous passez les where et toute autre option. Même chose que vous passeriez dans un findAll.
  • Page: Le nombre de la page, d’habitude elle vient de votre request.
  • Limit: Limite d’enregistrements par page, aussi ils viennent du request.
  • Options for calculating total people: C’est optionnel, si vous ne la passez pas, elle prend ce que tu mets dans le premier paramètre options. Elle fait un COUNT d’abord pour savoir le nombre total d’enregistrements. Le query ne doit pas être si gros pour une exécution rapide. Pour moi, c’était la même option, mais sans les include que Sequelize a besoin pour se connecter des tables distinctes, parce que ce n’est pas important pour le count.

Et paginated aurait la même structure que le json que vous pouvez voir. Ça va dépendre de votre framework web, qu’il convertit à Json.

Mes articles ne sont pas generés par l'IA, cependant ils pourrait y être corrigés. Le premier brouillon est ma création originale

Tags

Auteur

Écrit par Helmer Davila

Dans d'autres langues

I was looking if there was a function to make a paginator for myself using Sequelize with Typescript. I found a lot of tutorials that teach you how to calculate the offset and the number of pages.

Sequelize Pagination with Typescript

El otro día estaba buscando si existía alguna función para poder realizar paginación con Sequelize con Typescript. Habían muchos tutoriales que te enseñan como calcular el offset y el número de páginas.

Paginación con Sequelize (Typescript)