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Γ .
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)
-
Installa le dipendenze:
npm install
-
Configura le variabili d'ambiente: Il progetto utilizza il file
.envper le configurazioni. Copia il file template e modifica i valori:cp .env.example .env
Poi modifica
.envcon 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.envsu GitHub! Contiene credenziali sensibili. -
Avvia il server:
# ModalitΓ sviluppo (con nodemon) npm start npm run dev # ModalitΓ produzione npm run prod
Visita http://localhost:3000 per vedere la documentazione interattiva completa di tutti gli endpoint, parametri richiesti e modelli del database.
| 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) |
| 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) |
| 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 |
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET |
/product |
Ottieni tutti i prodotti |
GET |
/product/:id |
Ottieni prodotto per ID |
POST |
/product |
Crea nuovo prodotto |
- β 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
- π 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
- π 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
curl -X POST http://localhost:3000/person \
-H "Content-Type: application/json" \
-d '{
"name": "Mario Rossi",
"age": 30,
"email": "mario.rossi@email.com"
}'curl -X POST http://localhost:3000/form \
-F "image=@/path/to/image.jpg" \
-F "description=Descrizione del file"curl http://localhost:3000/person# 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
}'curl "http://localhost:3000/user/search?keyword=mario"# 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"}- π 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
- ποΈ 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
- Implementazione base con tutte le funzionalitΓ in un singolo file
- 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