Skip to content

πŸ“A beginner-friendly tutorial project for learning Express.js fundamentals.

Notifications You must be signed in to change notification settings

LucaMimmo05/express-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Express App - Progetto Tutorial ✨

πŸ“‹ Descrizione

Un'applicazione Express.js completamente riorganizzata e ottimizzata che include gestione di utenti, CRUD per persone, gestione prodotti, upload di file, gestione cookie, sessioni utente, autenticazione JWT e middleware personalizzati. Il progetto Γ¨ stato ristrutturato seguendo le best practices per una migliore manutenibilitΓ  e scalabilitΓ .

πŸ—οΈ Struttura del Progetto

express-app/
β”œβ”€β”€ πŸ“ config/              # Configurazioni centralizzate
β”‚   β”œβ”€β”€ config.js           # Variabili di configurazione
β”‚   β”œβ”€β”€ db.js               # Connessione database MongoDB
β”‚   └── multer.js           # Configurazione upload file
β”œβ”€β”€ πŸ“ controllers/         # Controller per la logica business
β”‚   β”œβ”€β”€ generalController.js # Cookie, upload, home, sessioni, dashboard
β”‚   β”œβ”€β”€ personController.js  # CRUD persone
β”‚   β”œβ”€β”€ productController.js # Gestione prodotti
β”‚   └── userController.js    # Gestione utenti, auth JWT
β”œβ”€β”€ πŸ“ middleware/          # Middleware personalizzati
β”‚   └── index.js            # Logging, errori, 404
β”œβ”€β”€ πŸ“ models/              # Modelli database Mongoose
β”‚   β”œβ”€β”€ Person.js           # Schema persona
β”‚   β”œβ”€β”€ Product.js          # Schema prodotto
β”‚   └── User.js             # Schema utente
β”œβ”€β”€ πŸ“ routes/              # Definizione rotte organizzate
β”‚   β”œβ”€β”€ generalRoutes.js    # Rotte generali, cookie, sessioni, dashboard
β”‚   β”œβ”€β”€ personRoutes.js     # Rotte CRUD persone
β”‚   β”œβ”€β”€ productRoutes.js    # Rotte gestione prodotti
β”‚   β”œβ”€β”€ userRoutes.js       # Rotte utenti, auth JWT
β”‚   └── index.js            # Aggregatore rotte
β”œβ”€β”€ πŸ“ public/              # File statici
β”‚   └── index.html          # Documentazione API interattiva
β”œβ”€β”€ πŸ“ uploads/             # File caricati dagli utenti
β”œβ”€β”€ πŸ“ views/               # Template (future implementazioni)
β”œβ”€β”€ .env                    # Variabili d'ambiente (NON committare)
β”œβ”€β”€ .env.example            # Template variabili d'ambiente
β”œβ”€β”€ .gitignore              # File da ignorare in Git
β”œβ”€β”€ SECURITY.md             # Guida alla sicurezza
β”œβ”€β”€ index.js                # File principale dell'app
β”œβ”€β”€ package.json            # Dipendenze e scripts
└── README.md               # Documentazione (questo file)

πŸš€ Installazione e Avvio

  1. Installa le dipendenze:

    npm install
  2. Configura le variabili d'ambiente: Il progetto utilizza il file .env per le configurazioni. Copia il file template e modifica i valori:

    cp .env.example .env

    Poi modifica .env con le tue configurazioni:

    # Configurazione Server
    PORT=3000
    NODE_ENV=development
    
    # Database MongoDB
    # Sostituisci con il tuo URL MongoDB
    MONGODB_URI=mongodb+srv://your-username:your-password@your-cluster.mongodb.net/your-database
    
    # Cookie Settings
    COOKIE_MAX_AGE=360000
    
    # File Upload Settings
    FILE_SIZE_LIMIT=1000000

    ⚠️ Importante: Non committare mai il file .env su GitHub! Contiene credenziali sensibili.

  3. Avvia il server:

    # ModalitΓ  sviluppo (con nodemon)
    npm start
    npm run dev
    
    # ModalitΓ  produzione
    npm run prod

πŸ“‘ API Endpoints

Visita http://localhost:3000 per vedere la documentazione interattiva completa di tutti gli endpoint, parametri richiesti e modelli del database.

🏠 Endpoint Generali

Metodo Endpoint Descrizione
GET / Documentazione API
GET /fetch Leggi cookie salvati
GET /remove-cookie Rimuovi cookie
POST /form Upload file con form data
GET /visit Crea/incrementa sessione
GET /remove-session Rimuovi sessione utente
GET /dashboard Dashboard protetta (richiede JWT)

πŸ‘€ Gestione Utenti e Autenticazione

Metodo Endpoint Descrizione
GET /user/search?keyword=... Ricerca utenti
GET /user/find/:username Informazioni utente specifico
POST /user/register Registrazione nuovo utente
POST /user/login Login utente (genera JWT)

πŸ‘₯ CRUD Persone

Metodo Endpoint Descrizione
GET /person Ottieni tutte le persone
GET /person/:id Ottieni persona per ID
POST /person Crea nuova persona
PUT /person Aggiorna persona esistente
DELETE /person/:id Elimina persona

πŸ“¦ Gestione Prodotti

Metodo Endpoint Descrizione
GET /product Ottieni tutti i prodotti
GET /product/:id Ottieni prodotto per ID
POST /product Crea nuovo prodotto

πŸ”§ FunzionalitΓ  Implementate

βœ… Core Features

  • βœ… Database MongoDB con Mongoose
  • βœ… CRUD completo per entitΓ  Person, Product e User
  • βœ… Gestione prodotti salvati su database
  • βœ… Upload file con validazione tipo/dimensione
  • βœ… Gestione cookie sicura
  • βœ… Gestione sessioni con express-session
  • βœ… Autenticazione JWT completa (register/login/protected routes)
  • βœ… Hashing password con bcryptjs
  • βœ… Middleware di logging per tutte le richieste
  • βœ… Gestione errori centralizzata e dettagliata
  • βœ… Validazione input robusta
  • βœ… Struttura modulare MVC
  • βœ… Risposte JSON standardizzate
  • βœ… Configurazione sicura con variabili d'ambiente
  • βœ… Interfaccia Web moderna per la documentazione API

πŸ›‘οΈ Sicurezza e Validazione

  • πŸ”’ Validazione tipi di file (solo immagini)
  • πŸ“ Limite dimensione file (1MB max)
  • πŸͺ Cookie httpOnly per sicurezza
  • ⚠️ Gestione errori sicura (no esposizione dati sensibili)
  • βœ”οΈ Validazione completa input utente
  • 🚫 Protezione contro path traversal negli upload
  • πŸ” Gestione sicura variabili d'ambiente (.env escluso da Git)
  • πŸ”‘ JWT Authentication con token sicuri
  • πŸ”’ Password hashing con bcryptjs (salt rounds: 10)
  • πŸ›‘οΈ Bearer token validation sui endpoint protetti

🎨 Miglioramenti Strutturali

  • πŸ“ Separazione responsabilitΓ  (routes, controllers, middleware)
  • πŸ”§ Configurazione centralizzata
  • πŸ“Š Logging strutturato con timestamp e IP
  • 🎯 Error handling specifico per tipo di errore
  • πŸ“ Documentazione completa
  • 🌐 Pagina HTML di benvenuto e documentazione

πŸ“ Esempi di Utilizzo

Creare una persona:

curl -X POST http://localhost:3000/person \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Mario Rossi",
    "age": 30,
    "email": "mario.rossi@email.com"
  }'

Upload di un file:

curl -X POST http://localhost:3000/form \
  -F "image=@/path/to/image.jpg" \
  -F "description=Descrizione del file"

Ottenere tutte le persone:

curl http://localhost:3000/person

Gestione prodotti:

# Ottieni tutti i prodotti
curl http://localhost:3000/product

# Ottieni un prodotto specifico per ID
curl http://localhost:3000/product/656...

# Crea un nuovo prodotto
curl -X POST http://localhost:3000/product \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Smartphone",
    "price": 699
  }'

Ricerca utente:

curl "http://localhost:3000/user/search?keyword=mario"

Autenticazione JWT:

# 1. Registra un nuovo utente
curl -X POST http://localhost:3000/user/register \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser", "password": "password123"}'

# 2. Effettua login per ottenere il token
curl -X POST http://localhost:3000/user/login \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser", "password": "password123"}'
# Output: {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}

# 3. Accedi alla dashboard protetta con il token
curl -H "Authorization: Bearer YOUR_JWT_TOKEN_HERE" \
  http://localhost:3000/dashboard
# Output: "Welcome, testuser"

# 4. Tentativo accesso senza token (fallisce)
curl http://localhost:3000/dashboard
# Output: {"message": "Token missing or malformed"}

πŸ”„ Changelog

v2.1 - UI & Database Models ✨

  • 🌐 Interfaccia: Nuova pagina HTML moderna per la documentazione API
  • πŸ“š Documentazione: Lista interattiva di endpoint e modelli
  • πŸ—„οΈ Database: Aggiunti modelli Mongoose per User e Product
  • πŸ›‘οΈ Resilienza: Il server si avvia anche se il DB non Γ¨ raggiungibile
  • πŸ› Bugfix: Corretto ordine delle rotte utente e gestione errori DB

v2.0 - Ristrutturazione Completa ✨

  • πŸ—οΈ Architettura: Implementato pattern MVC completo
  • πŸ“ Organizzazione: Separazione logica in cartelle dedicate
  • πŸ›‘οΈ Middleware: Sistema centralizzato per logging ed errori
  • 🎯 Routing: Organizzazione modulare delle rotte
  • πŸ“Š Configurazione: Sistema centralizzato per configurazioni
  • βœ… Validazione: Migliorata validazione input e gestione errori
  • πŸ” Sicurezza: Gestione sicura variabili d'ambiente
  • πŸͺ Sessioni: Aggiunta gestione sessioni utente
  • πŸ”‘ Autenticazione: Sistema JWT completo con register/login
  • πŸ”’ Password Security: Hashing bcryptjs per password sicure
  • πŸ›‘οΈ Protected Routes: Dashboard protetta con JWT
  • πŸ“¦ Gestione Prodotti: API RESTful per gestione prodotti
  • πŸ“– Documentazione: Aggiunta documentazione completa e guida sicurezza
  • πŸ”§ DevOps: Aggiunto .gitignore e scripts npm ottimizzati

v1.0 - Versione Originale

  • Implementazione base con tutte le funzionalitΓ  in un singolo file

πŸ“š Tecnologie Utilizzate

  • Node.js - Runtime JavaScript
  • Express.js v5 - Framework web
  • MongoDB - Database NoSQL
  • Mongoose - ODM per MongoDB
  • Multer - Gestione upload file
  • Cookie-parser - Gestione cookie
  • Express-session - Gestione sessioni utente
  • JsonWebToken (JWT) - Autenticazione basata su token
  • Bcryptjs - Hashing sicuro delle password
  • Dotenv - Gestione variabili d'ambiente
  • Nodemon - Auto-restart sviluppo

About

πŸ“A beginner-friendly tutorial project for learning Express.js fundamentals.

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published