Lifecycle Hooks

NestJS 🟡 Mid

Définition

Interfaces (OnModuleInit, OnModuleDestroy, OnApplicationBootstrap, OnApplicationShutdown) qui permettent d'exécuter du code a des moments clés du cycle de vie.

Analogie

Comme les étapes d'ouverture et fermeture d'un magasin : mise en place le matin, rangement le soir.

Exemple de code

@Injectable()
export class DbService implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.connect();
  }
  async onModuleDestroy() {
    await this.disconnect();
  }
}

Cas d'usage

Initialiser des connexions base de données au démarrage et les fermer proprement a l'arrêt.

Anti-pattern

Initialiser des ressources dans le constructeur au lieu de onModuleInit, bloquant la DI.
#core#interview

En entretien

  1. Quels sont les Lifecycle Hooks disponibles dans NestJS et à quoi servent-ils ?

    On a OnModuleInit, OnModuleDestroy, OnApplicationBootstrap et OnApplicationShutdown, qui permettent d'exécuter du code à des moments clés du cycle de vie, un peu comme les étapes d'ouverture et de fermeture d'un magasin. On les utilise typiquement pour initialiser une connexion base de données au démarrage et la fermer proprement à l'arrêt.

  2. Pourquoi ne pas juste initialiser une connexion dans le constructeur du service ?

    Parce que c'est l'anti-pattern à éviter : initialiser des ressources dans le constructeur bloque la résolution de la DI. Il faut utiliser onModuleInit à la place, qui s'exécute une fois que toutes les dépendances sont résolues.

Fiche mise à jour le 2026-09-27

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