Next.js : Structure d’un projet Next.js 15 avec Express

Voici une structure recommandée pour un projet Next.js 15, en tenant compte de votre existant avec Node.js/Express et vos besoins spécifiques pour inclure des pages, des composants, une base de données et des API.


Structure globale du projet

/my-nextjs-app
├── /app                    # Répertoire pour les routes et les pages (Next.js 13+ App Router)
│   ├── /api                # API Routes internes (opérable sans dépendre de votre Express existant)
│   │   └── route.js        # Exemple : API pour des données internes
│   ├── /dashboard          # Exemple d'une route "dashboard"
│   │   ├── layout.js       # Layout partagé pour toutes les pages sous /dashboard
│   │   └── page.js         # Page principale pour /dashboard
│   ├── layout.js           # Layout global pour l'application
│   ├── page.js             # Page d'accueil `/`
│   ├── /about
│   │   └── page.js         # Page pour `/about`
├── /components             # Composants réutilisables (UI, formulaires, boutons, etc.)
│   ├── Header.js           # Exemple de composant d'en-tête
│   ├── Footer.js           # Exemple de composant de pied de page
│   └── Button.js           # Bouton réutilisable
├── /lib                    # Bibliothèques et utilitaires partagés
│   ├── db.js               # Connexion à la base de données (via Prisma, Sequelize, etc.)
│   └── fetcher.js          # Fonctions pour requêtes externes
├── /public                 # Fichiers publics accessibles directement (images, favicon, etc.)
│   ├── /images             # Images statiques
│   └── favicon.ico         # Icône de la page
├── /styles                 # Feuilles de style globales et modules CSS
│   ├── globals.css         # Styles globaux
│   └── variables.css       # Variables CSS personnalisées
├── /pages                  # Répertoire pour pages spécifiques ou API (si nécessaire)
│   ├── /api                # API routes supplémentaires (intégré avec Express ou pour migration)
│   │   └── hello.js        # Exemple d'API route
├── /tests                  # Tests unitaires ou d'intégration
│   ├── /components         # Tests pour les composants
│   ├── /pages              # Tests pour les pages
│   └── setupTests.js       # Configuration des tests
├── .env                    # Variables d'environnement (Base de données, clés API, etc.)
├── next.config.js          # Configuration Next.js
├── package.json            # Dépendances et scripts
└── README.md               # Documentation du projet


Détails des répertoires et fichiers clés

1. Pages et Routes (/app)

  • Utilisez le répertoire /app (système de routage moderne de Next.js) pour définir vos pages.
  • Exemple :
    • Une page à /dashboard :
      • app/dashboard/page.js
    • Un layout partagé :
      • app/dashboard/layout.js

2. Composants réutilisables (/components)

  • Placez les composants UI (entête, boutons, cartes, etc.) dans /components.
  • Exemple d’un composant bouton réutilisable : // components/Button.js export default function Button({ label, onClick }) { return <button onClick={onClick}>{label}</button>; }

3. Base de données (/lib/db.js)

  • Centralisez la connexion à la base de données ici.
  • Exemple avec Prisma : // lib/db.js import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export default prisma;
  • Si vous utilisez une base liée à Express, vous pouvez la connecter ici et la réutiliser.

4. API Routes (/app/api ou /pages/api)

  • Pour des API internes ou publiques, utilisez le répertoire /app/api.
  • Exemple d’API pour récupérer des données : // app/api/data/route.js export async function GET() { const data = await fetchDataFromDatabase(); // Utilise /lib/db.js return new Response(JSON.stringify(data), { status: 200 }); }

5. Intégration d’Express existant

  • Si vous souhaitez intégrer votre API Express actuelle, configurez un serveur personnalisé avec Next.js.
  • Exemple : // server.js const express = require('express'); const next = require('next'); const app = next({ dev: process.env.NODE_ENV !== 'production' }); const handle = app.getRequestHandler(); app.prepare().then(() => { const server = express(); // Vos routes Express server.use('/api', require('./your-express-routes')); // Gestion des routes Next.js server.all('*', (req, res) => { return handle(req, res); }); server.listen(3000, () => console.log('> Ready on http://localhost:3000')); });

6. Public (/public)

  • Placez ici les fichiers accessibles directement (logos, images, etc.).
  • Exemple :
    • Une image public/images/logo.png sera accessible via /images/logo.png.

7. Styles (/styles)

  • Utilisez les fichiers CSS globaux ou les modules CSS pour styliser vos composants/pages.

Migration depuis Node.js/Express

  1. API Routes :
    • Si vos API sont simples, migrez-les directement dans /app/api.
    • Pour des API complexes, conservez votre serveur Express et utilisez-le avec un serveur Next.js personnalisé.
  2. Pages Frontend :
    • Remplacez vos routes Express qui servent des pages par des fichiers dans /app.
  3. Base de données :
    • Réutilisez vos configurations existantes dans /lib/db.js.
  4. Dépendances communes :
    • Intégrez vos dépendances actuelles dans package.json (e.g., dotenv, express).

Avatar de Inconnu

About Duarte TERENCIO

Architecte Solutions
Cet article a été publié dans Cloud computing. Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.