Gestionnaires de routes
Fait partie de la section L'essentiel de Next.js du Journey React de Coddy — leçon 37 sur 47.
Les Server Components répondent à la plupart des besoins en matière de données, car ils s'exécutent déjà sur le serveur. Mais parfois, le navigateur doit demander des données plus tard, après un clic, après la saisie dans un champ de recherche, et pour cela, vous avez besoin d'un endpoint à appeler.
Un dossier contenant un fichier route.js devient exactement cela. Même règle de routage que pour les pages, mais avec un fichier spécial différent :
app/
api/
dishes/
route.js -> /api/dishesÀ l'intérieur, vous exportez une fonction nommée d'après la méthode HTTP :
import { dishes } from '../../../lib/dishes.js';
export async function GET() {
return Response.json(dishes);
}Response.json(...) est la réponse complète : elle sérialise la valeur et définit le type de contenu JSON. Vous pouvez également exporter POST, PUT, DELETE depuis ce même fichier.
Ensuite, la partie client est du code navigateur ordinaire :
const res = await fetch('/api/dishes');
const data = await res.json();Deux choses à bien distinguer. Un dossier peut contenir un page.jsx ou un route.js, jamais les deux : ils revendiqueraient tous les deux la même URL. Et route.js n'est pas un composant : il renvoie une Response, pas du JSX.
Utilisez un gestionnaire de route lorsque le navigateur a besoin de données à la demande, ou lorsque quelque chose d'extérieur à votre app a besoin de faire un appel. Si un composant serveur peut simplement lire les données pendant le rendu, laissez-le faire.
Défi
MoyenCréez une petite API et appelez-la depuis le navigateur.
- Dans
app/api/dishes/route.js, exportez uneasync function GETqui retournedishesau format JSON. - Dans
components/DishLoader.jsx, terminezloadDishes: effectuez un fetch de/api/dishes, lisez le body JSON et stockez les names de plats avecsetNames.
Cliquer sur #load-btn doit remplir #dish-list avec les quatre noms.
Essayez vous-même
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de L'essentiel de Next.js
1Pourquoi Next.js
Ce que Next.js apporteLe dossier AppVotre première pageRécapitulatif : Pourquoi Next.js4Serveur & Client
Deux types de composantsLire l'erreurLa ligne 'use client'Garder les parties client de petite tailleServeur dans le clientRécapitulatif : Serveur & Client7Navigation côté client
Le lien actifRoutage programmatiqueFiltrage avec l'URLGestionnaires de routesRécapitulatif : Navigation2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage