Séance 7 : Nuxt & API

🎯 Objectifs

  • Consommer des données dans Nuxt.

  • Gérer l’authentification avec middleware.

📖 Partie théorique

Data fetching

Source : https://nuxt.com/docs/4.x/getting-started/data-fetching

Nuxt propose plusieurs helpers pour récupérer des données de façon déclarative et compatible SSR/SSG : useFetch et useAsyncData sont les plus courants. Ils sont auto‑importés et s'intègrent au cycle de rendu (server ou client) de Nuxt.

Principes clés :

  • Les appels faits pendant la phase serveur sont exécutés avant l'envoi du HTML (meilleur SEO et fast first paint).

  • Les helpers gèrent automatiquement l'état pending / error et la réhydratation côté client.

  • Les résultats peuvent être mis en cache et revalidés (revalidation) selon la configuration.

useFetch

https://nuxt.com/docs/4.x/getting-started/data-fetching#usefetch

Exemple :

useAsyncData

https://nuxt.com/docs/4.x/getting-started/data-fetching#useasyncdata

Exemple :

Quand utiliser l'un ou l'autre

  • useFetch : très pratique pour des appels simples dans le setup d'un composant/page.

  • useAsyncData : préférable si vous voulez contrôler la clé de cache, le transform ou la revalidation.

Autres utilitaires liés :

  • useState() : stocke un état réactif côté serveur/client (idéal pour partager une valeur entre pages sans Pinia). Exemple :

  • useNuxtApp().$fetch ou $fetch : utilitaires pour faire des requêtes internes ou externes.

Server API (endpoints)

Nuxt offre un dossier server/api/ pour créer des endpoints server‑side. Exemple :

Puis côté client :

Bonnes pratiques et pièges courants :

  • Préférer $fetch/useFetch pour les appels internes aux endpoints Nuxt (optimisations internes).

  • Faire attention aux appels indésirables côté client (watch, effets) — utiliser lazy: true si nécessaire.

  • Gérer les erreurs et l'état de chargement pour afficher des loaders ou des messages clairs.

  • Pour des pages statiques (SSG), vérifier si le contenu doit être revalidé (ISR-like) et configurer la revalidation via useAsyncData ou des hooks de build.

Middleware de route

source : https://nuxt.com/docs/4.x/getting-started/routing#route-middleware

  • Nuxt permet de définir des middlewares pour protéger des routes (authentification, autorisation).

Ecrire le middleware dans middleware/auth.js (par exemple) :

  • Appliquer le middleware globalement dans nuxt.config.ts ou localement dans une page avec definePageMeta.

Il est aussi possible d'utiliser des modules (https://nuxt.com/modules?category=Security&sortBy=stars) pour gérer l'authentification plus facilement ou de manière plus complète, en intégrant des providers OAuth, JWT, etc.

Appel API avec un token JWT

en VueJs avec fetch

en NuxtJs avec useFetch

📝 Travaux pratiques

  • Reconnectér les appels API de l’application Vue 3 précédente en Nuxt.

  • Créer page /login.

  • Stocker token JWT dans Pinia/localStorage.

  • Protéger l'ajout d'une tâche avec middleware.

Last updated