Express — Cheat Sheet

Tag: express, nodejs, backend, middleware, routing, javascript

Livello: intermedio

TL;DR: Framework web minimalista per Node.js. Gestisce routing HTTP e middleware per elaborare rapidamente le richieste e creare API REST.

Concetti chiave

-

Standard de facto per applicazioni web e API RESTful in Node.js.

-

Architettura unopinionated, lascia totale libertà organizzativa al team.

-

Routing basato su metodi HTTP (GET, POST, PUT, DELETE, ecc.) e pattern di percorsi.

-

I middleware sono funzioni sequenziali che accedono all'oggetto richiesta (req), risposta (res) e alla callback next().

-

L'oggetto Router (creato con express.Router()) serve a modularizzare e incapsulare gruppi di route.

-

req.params estrae variabili dalla route (es. /users/:id), req.query i dati dalla query string.

-

I middleware integrati express.json() e express.urlencoded() effettuano il parsing del body delle richieste HTTP.

-

I middleware di gestione degli errori hanno la firma specifica a quattro argomenti: (err, req, res, next).

Domande tipiche e risposte pronte

-

Q: Qual e' la differenza tra req.params, req.query e req.body?R: req.params legge le variabili definite nel path, req.query estrae quelle presenti nell'URL dopo il punto interrogativo, req.body contiene il payload inviato (spesso in POST/PUT).

-

Q: Cos'e' un middleware e a cosa serve?R: È un blocco di codice che si frappone nel ciclo richiesta/risposta. Lo uso per controlli di autenticazione, logging o parsing dati. Deve restituire una risposta o chiamare next().

-

Q: Come si gestiscono le eccezioni e gli errori?R: Passo l'errore chiamando next(err) e definisco un middleware di errore (con 4 parametri) alla fine della catena app.use() per centralizzare la gestione dei crash.

Insidie e errori comuni

-

Dimenticare di chiamare next() all'interno di un middleware, lasciando la richiesta in sospeso fino al timeout.

-

Inviare più volte la risposta al client (es. usando due res.json()), generando l'errore "Cannot set headers after they are sent to the client".

-

Posizionare i middleware di gestione errori in cima al file principale invece che in fondo (devono catturare ciò che le route falliscono).

-

Omettere il catch block nelle chiamate asincrone, perdendo il tracciamento delle promise rifiutate (Express 5.x risolve nativamente questo problema).

Snippet e comandiJavaScript

```const express = require('express');

const app = express();

// Middleware per parser del JSON

app.use(express.json());

// Esempio base router

const apiRouter = express.Router();

apiRouter.post('/auth', (req, res) => {

const { user } = req.body;

res.status(200).json({ auth: true, user });

});

// Montaggio router

app.use('/api', apiRouter);

// Middleware di error handling globale

app.use((err, req, res, next) => {

console.error(err.message);

res.status(err.status || 500).json({ error: 'Internal Server Error' });

});

app.listen(3000, () => console.log('Listening on port 3000'));

```

Da ripassare

-

[ ] Pattern architetturali Controller-Service-Repository integrati nei file di route.

-

[ ] Tipizzazione stretta TypeScript per Request e Response personalizzati (estensione delle interfacce base).

Riferimenti

-

Documentazione ufficiale Express (expressjs.com)

Jarvis Interviews
Jarvis