Pagination

NestJS 🟡 Mid

Définition

Pattern pour retourner les résultats par pages via offset/limit ou cursor-based. Évite de charger des milliers d'enregistrements en une seule requête.

Analogie

Comme un livre avec des pages : tu lis page par page au lieu de tout le livre d'un coup.

Exemple de code

async findAll(page = 1, limit = 10) {
  const [items, total] = await this.repo.findAndCount({
    skip: (page - 1) * limit,
    take: limit,
  });
  return { items, total, page, lastPage: Math.ceil(total / limit) };
}

Cas d'usage

Toute API de liste doit être paginée pour éviter les réponses massives et les timeouts.

Anti-pattern

Retourner tous les enregistrements sans pagination, causant des timeouts avec les grosses tables.
#core#interview

En entretien

  1. Comment tu implémenterais la pagination sur une API de liste ?

    Avec un pattern offset/limit ou cursor-based, en calculant skip et take à partir de la page et de la limite, un peu comme un livre qu'on lit page par page au lieu de tout d'un coup. Toute API de liste doit être paginée pour éviter les réponses massives et les timeouts.

  2. Qu'est-ce qui se passe si on oublie la pagination sur une grosse table ?

    C'est l'anti-pattern décrit : retourner tous les enregistrements sans pagination cause des timeouts avec les grosses tables. Il faut toujours retourner items, total, page et lastPage plutôt que la liste brute complète.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre