Tutorial Node.js con esempi eseguibili
Un tutorial Node.js gratuito con esempi che girano nella pagina: file, moduli, l'event loop, server Express a cui invii richieste, MongoDB e JWT. Modifica il codice ed eseguilo di nuovo.
Inizia il corsoPrimi passi
- Cos'è Node.jsNode.js è un runtime che esegue JavaScript fuori dal browser, sui server e nel terminale. Non è un linguaggio e non è un framework: è V8, più un event loop, più le API per file, rete e processi.
- Node.js vs JavaScriptJavaScript è il linguaggio; Node.js è un programma che lo esegue fuori dal browser. La sintassi è identica, ma le variabili globali e le API integrate intorno al tuo codice sono diverse.
- process.argvprocess.argv è un array con la riga di comando che ha avviato il programma: l'eseguibile node, il percorso dello script, poi ogni argomento che hai scritto. Usa process.argv.slice(2) per avere solo i tuoi argomenti.
- process.envprocess.env è un oggetto con le variabili d'ambiente con cui è stato avviato il tuo programma Node.js. Ogni valore è una stringa o undefined, quindi converti tu numeri e booleani e dai a ogni variabile un default.
- Leggere l'inputNode.js non ha una funzione prompt(). Per fare una domanda all'utente nel terminale, crea un'interfaccia readline su process.stdin e chiama question(), oppure fai await con readline/promises.
File e percorsi
- fs.readFileLeggi un file in Node.js con fs.readFile (callback), fs.readFileSync oppure await readFile da fs/promises. Passa 'utf8' per avere una stringa e gestisci ENOENT quando il file manca.
- fs.writeFileScrivi un file in Node.js con fs.writeFile, fs.writeFileSync oppure await writeFile da fs/promises. Il file viene creato se manca e sostituito se esiste; usa appendFile per aggiungere in fondo.
- fs/promisesfs/promises è la versione a promise del modulo fs di Node: readFile, writeFile, readdir, stat, mkdir, rm e rename restituiscono tutte promise su cui fare await, e gli errori si gestiscono con try/catch.
- Modulo pathIl modulo path costruisce e scompone i percorsi dei file nel modo giusto per il sistema operativo. path.join unisce i segmenti; path.resolve li trasforma in un percorso assoluto, partendo dalla cartella corrente.
Node asincrono
- Event loopL'event loop di Node.js esegue le callback per fasi (timers, poll, check, close) e tra una callback e l'altra svuota la coda di process.nextTick e poi quella delle promise. Esegui gli esempi per vedere l'ordine esatto.
- EventEmitterEventEmitter, del modulo events di Node, permette a un oggetto di annunciare eventi con un nome tramite emit e ad altro codice di reagire con on o once. I listener vengono eseguiti in modo sincrono, nell'ordine in cui sono stati aggiunti.
HTTP ed Express
- Server HTTP`http.createServer()` riceve una funzione che viene eseguita a ogni richiesta con `req` e `res`. Leggi metodo e URL da `req`, poi imposti status, header e body su `res` e chiami `res.end()`.
- Routing in ExpressUna route in Express è un metodo, un path e un handler: `app.get('/users/:id', handler)`. Raggruppa le route correlate in un `express.Router()` e montalo sotto un prefisso con `app.use('/api', router)`.
- Middleware ExpressUn middleware di Express è una funzione `(req, res, next)` che viene eseguita prima del route handler. Può leggere o modificare la richiesta, chiuderla con una risposta o chiamare `next()` per passarla avanti.
- req.params, query, body`req.params` contiene le parti con nome del path (`/users/:id`), `req.query` la query string (`?sort=new`) e `req.body` il body della richiesta già analizzato, che resta `undefined` finché non aggiungi un body parser come `express.json()`.
- Gestione degli erroriUn error handler di Express è un middleware con quattro argomenti, `(err, req, res, next)`, registrato dopo le route. Express 5 gli passa gli errori lanciati, le chiamate a `next(err)` e le promise rifiutate degli handler async.
- express.static`app.use(express.static(path.join(__dirname, 'public')))` serve ogni file della cartella `public` all'URL corrispondente: `public/style.css` risponde a `/style.css`. Aggiungi un path di montaggio per servirli sotto un prefisso.
- CORS in ExpressUn errore CORS significa che il browser ha impedito a una pagina di leggere la risposta della tua API, perché la risposta non autorizzava l'origine della pagina. Si risolve sul server inviando `Access-Control-Allow-Origin` e rispondendo alle richieste preflight `OPTIONS`, a mano o con il pacchetto `cors`.
Dati e autenticazione
- MongoDBUsa MongoDB da Node.js con il driver ufficiale mongodb: connettiti con MongoClient, poi inserisci, cerca, aggiorna ed elimina documenti in una collection, tutto con async/await.
- JWTUn JWT è un token firmato fatto di tre parti base64url che il server emette al login e controlla a ogni richiesta. In Node.js lo firmi e lo verifichi con il pacchetto jose o jsonwebtoken e una chiave segreta.