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
- Une page à
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.pngsera accessible via/images/logo.png.
- Une image
7. Styles (/styles)
- Utilisez les fichiers CSS globaux ou les modules CSS pour styliser vos composants/pages.
Migration depuis Node.js/Express
- 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é.
- Si vos API sont simples, migrez-les directement dans
- Pages Frontend :
- Remplacez vos routes Express qui servent des pages par des fichiers dans
/app.
- Remplacez vos routes Express qui servent des pages par des fichiers dans
- Base de données :
- Réutilisez vos configurations existantes dans
/lib/db.js.
- Réutilisez vos configurations existantes dans
- Dépendances communes :
- Intégrez vos dépendances actuelles dans
package.json(e.g.,dotenv,express).
- Intégrez vos dépendances actuelles dans