Node.js è un ambiente di runtime lato server per Ja­va­Script. Permette di eseguire Ja­va­Script non solo nel browser, ma anche sui server, ed è par­ti­co­lar­men­te adatto per lo sviluppo di ap­pli­ca­zio­ni scalabili e basate su eventi. Grazie alla sua ar­chi­tet­tu­ra asincrona e non bloccante, le svi­lup­pa­tri­ci e gli svi­lup­pa­to­ri possono creare ap­pli­ca­zio­ni di rete e in tempo reale in modo ef­fi­cien­te con Node.js.

Cos’è Node.js?

Node.js è un ambiente di runtime lato server basato sul motore Ja­va­Script V8 di Google Chrome, che permette di eseguire il codice Ja­va­Script al di fuori del browser. Ciò consente di im­ple­men­ta­re sia la logica del client che quella del server nella stessa lingua, rendendo lo sviluppo più coerente ed ef­fi­cien­te. Una ca­rat­te­ri­sti­ca centrale di Node.js è la sua ar­chi­tet­tu­ra basata su eventi e non bloccante, che permette un alto numero di con­nes­sio­ni si­mul­ta­nee con un consumo minimo di risorse.

Invece di avviare un nuovo thread per ogni richiesta, Node.js utilizza un modello chiamato event loop, che elabora i compiti in un ciclo e risponde agli eventi non appena si ve­ri­fi­ca­no. Questa ar­chi­tet­tu­ra rende Node.js par­ti­co­lar­men­te adatto per ap­pli­ca­zio­ni che ri­chie­do­no molte ope­ra­zio­ni di I/O, come i server web. Tramite il Node Packet Manager (npm) è di­spo­ni­bi­le un ampio eco­si­ste­ma di moduli, librerie e strumenti che facilita l’im­ple­men­ta­zio­ne rapida di funzioni complesse. Node.js è inoltre mul­ti­piat­ta­for­ma, funziona su Windows, macOS e Linux e può essere uti­liz­za­to sia per piccole ap­pli­ca­zio­ni server, sia per ar­chi­tet­tu­re di mi­cro­ser­vi­zi altamente scalabili.

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

In­stal­la­zio­ne di Node.js

Prima di poter lavorare con Node.js, devi in­stal­lar­lo sul tuo computer. L’ambiente di runtime include tutto il ne­ces­sa­rio: Ja­va­Script, l’in­ter­fac­cia a riga di comando (CLI) per l’ese­cu­zio­ne degli script, e il gestore dei pacchetti npm, che consente l’accesso a moduli e librerie ag­giun­ti­ve. Con questo ambiente, puoi testare semplici script così come svi­lup­pa­re ap­pli­ca­zio­ni server e web complesse.

Visita in­nan­zi­tut­to il sito ufficiale di Node.js per ef­fet­tua­re il download. Sulla pagina prin­ci­pa­le vedrai di solito due versioni: la versione LTS (Long Term Support) e la versione più recente. Per chi è agli inizi e per progetti pro­dut­ti­vi è con­si­glia­ta la versione LTS, in quanto sup­por­ta­ta a lungo termine e più stabile.

Immagine: Screenshot della homepage di Node.js
Seleziona sem­pli­ce­men­te il tuo sistema operativo e la versione de­si­de­ra­ta di Node.js.

Clicca sul pulsante di download per il tuo sistema operativo. Copia i comandi del terminale o apri il pacchetto di in­stal­la­zio­ne scaricato e segui le istru­zio­ni del file di in­stal­la­zio­ne. Puoi mantenere le opzioni pre­de­fi­ni­te.

Dopo aver com­ple­ta­to l’in­stal­la­zio­ne, apri il tuo terminale. Inserisci i seguenti comandi per as­si­cu­rar­ti che Node.js sia stato in­stal­la­to cor­ret­ta­men­te:

node -v
npm -v
bash

Se entrambi i comandi re­sti­tui­sco­no un numero di versione, Node.js è pronto per l’uso. Ora puoi eseguire i tuoi script Ja­va­Script o avviare il server web Node.js.

Tutorial su Node.js: il primo Hello World nel CLI

Dopo aver in­stal­la­to Node.js, puoi uti­liz­za­re la riga di comando per eseguire il codice Ja­va­Script di­ret­ta­men­te sul tuo computer. Questo è un modo semplice per testare la fun­zio­na­li­tà di Node.js senza dover costruire im­me­dia­ta­men­te un intero server web.

Crea un nuovo file con il nome hello.js e inserisci il seguente codice:

console.log("Hello, World!");
Ja­va­Script

Il comando console.log() è una funzione Ja­va­Script in­cor­po­ra­ta che emette contenuti sull’uscita standard, in questo caso la tua console. Node.js in­ter­pre­ta questo comando e vi­sua­liz­za il testo di­ret­ta­men­te nel terminale. Puoi salvare il file e suc­ces­si­va­men­te navigare tramite il terminale o il prompt dei comandi nella directory del file. Lì esegui il comando:

node hello.js
bash

Dovresti ora vedere il seguente output:

Hello, World!

Questo semplice esempio dimostra come Node.js funzioni come ambiente di runtime Ja­va­Script sul tuo computer e come il codice possa essere eseguito nella console, prima di passare ad ap­pli­ca­zio­ni più complesse.

Creare un server web Hello World

Oltre a semplici script, Node.js è perfetto per creare server web. Con poche righe di codice, puoi impostare un server HTTP fun­zio­nan­te che risponde alle richieste.

Crea in­nan­zi­tut­to un file chiamato server.js con il seguente contenuto:

const http = require('http'); // Importa il modulo HTTP integrato
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200; // Codice di stato HTTP 200 = OK
res.setHeader('Content-Type', 'text/plain'); // Definisce che la risposta è testo semplice
res.end('Hello, World!\n'); // Invia il testo al client e termina la risposta
});
server.listen(port, hostname, () => {
console.log(`Il server è in esecuzione su http://${hostname}:${port}/`);
});
Ja­va­Script

Node.js dispone di un modulo integrato chiamato http, che fornisce funzioni per la co­mu­ni­ca­zio­ne tramite il pro­to­col­lo HTTP. Con require('http') in­clu­dia­mo ini­zial­men­te questo modulo.

http.createServer() crea un nuovo server web. La funzione passata (req, res) => { ... } viene chiamata a ogni richiesta in arrivo. req contiene in­for­ma­zio­ni sulla richiesta in arrivo, come URL, in­te­sta­zio­ni o parametri. res viene uti­liz­za­to per inviare una risposta al client.

Il frammento di codice res.statusCode = 200; imposta il codice di stato della risposta HTTP (200 = successo). Viene definito anche il tipo MIME della risposta, in questo caso testo semplice. Con res.end('Hello, World!\n'); il messaggio viene inviato al client e la risposta si conclude.

Ora avvia il file con Node.js:

node server.js
bash

Apri suc­ces­si­va­men­te un browser web o utilizza uno strumento come curl e accedi al seguente indirizzo IP:

http://127.0.0.1:3000/

Dovresti vedere il messaggio “Hello, World!”, che conferma che il server web funziona cor­ret­ta­men­te.

Struttura del modulo e npm

Node.js si basa su un’ar­chi­tet­tu­ra modulare che consente agli svi­lup­pa­to­ri e alle svi­lup­pa­tri­ci di sud­di­vi­de­re le ap­pli­ca­zio­ni in unità più piccole e riu­ti­liz­za­bi­li. Queste unità, chiamate moduli, in­cap­su­la­no de­ter­mi­na­te fun­zio­na­li­tà come l’ela­bo­ra­zio­ne di file, la co­mu­ni­ca­zio­ne di rete o i calcoli ma­te­ma­ti­ci e possono essere importate e uti­liz­za­te in altre parti dell’ap­pli­ca­zio­ne. Oltre ai moduli core integrati come fs (file system), il modulo già uti­liz­za­to http o path, Node.js offre anche la pos­si­bi­li­tà di creare moduli propri per or­ga­niz­za­re compiti specifici all’interno di un progetto. Ogni modulo in Node.js è me­mo­riz­za­to in un file separato ed esporta le sue funzioni o oggetti tramite module.exports in modo che altri file possano im­por­tar­li e uti­liz­zar­li.

Un com­po­nen­te centrale dell’eco­si­ste­ma Node.js è il Node Package Manager (npm). Con npm è possibile in­stal­la­re, gestire e ag­gior­na­re migliaia di pacchetti di­spo­ni­bi­li gra­tui­ta­men­te, forniti dalla community. Gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci possono uti­liz­za­re npm per integrare au­to­ma­ti­ca­men­te le di­pen­den­ze in un progetto, con­trol­la­re le versioni ed evitare conflitti tra diversi pacchetti. I pacchetti sono ge­ne­ral­men­te ar­chi­via­ti in un progetto nella sot­to­di­rec­to­ry node_modules, mentre il file package.json contiene i metadati, le di­pen­den­ze e gli script del progetto.

La struttura modulare e npm fa­ci­li­ta­no no­te­vol­men­te la ma­nu­ten­zio­ne e l’espan­sio­ne dei progetti, poiché i singoli moduli possono essere svi­lup­pa­ti, testati e so­sti­tui­ti in modo in­di­pen­den­te. Inoltre, pro­muo­vo­no il riu­ti­liz­zo del codice e la se­pa­ra­zio­ne delle re­spon­sa­bi­li­tà all’interno di un’ap­pli­ca­zio­ne. In com­bi­na­zio­ne con strumenti moderni di gestione dei pacchetti come npx, i moduli Node.js possono essere eseguiti tem­po­ra­nea­men­te senza doverli in­stal­la­re per­ma­nen­te­men­te, il che supporta test rapidi e pro­to­ti­pa­zio­ne. Grazie a questo sistema, gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci possono creare ap­pli­ca­zio­ni molto complesse basate su piccoli com­po­nen­ti ben ma­nu­te­ni­bi­li, fa­cil­men­te scalabili.

Ambiti di ap­pli­ca­zio­ne di Node.js

Node.js non è solo un ambiente di runtime per Ja­va­Script, ma anche uno strumento versatile per lo sviluppo di ap­pli­ca­zio­ni. Di seguito vengono pre­sen­ta­ti in dettaglio tre ambiti di ap­pli­ca­zio­ne esem­pli­fi­ca­ti­vi.

Sviluppo di API

Node.js è adatto per lo sviluppo di API, che fungono da in­ter­fac­ce tra diverse ap­pli­ca­zio­ni o sistemi. Grazie all’ar­chi­tet­tu­ra basata sugli eventi e alle funzioni di I/O non bloccanti, le API svi­lup­pa­te in Node.js possono gestire grandi quantità di richieste si­mul­ta­nea­men­te senza com­pro­met­te­re le pre­sta­zio­ni. Gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci uti­liz­za­no fre­quen­te­men­te framework come Express.js per creare API RESTful in modo rapido ed ef­fi­cien­te. Tali API con­sen­to­no alle ap­pli­ca­zio­ni di leggere, scrivere o ag­gior­na­re dati. Inoltre, Node.js sem­pli­fi­ca l’in­te­gra­zio­ne con database come MongoDB, Post­gre­SQL o MySQL, rendendo l’API potente, fles­si­bi­le e scalabile.

Ap­pli­ca­zio­ni in tempo reale

Anche per le ap­pli­ca­zio­ni in tempo reale, in cui i dati devono essere scambiati im­me­dia­ta­men­te tra server e client, Node.js è estre­ma­men­te adatto. Esempi di questo tipo sono ap­pli­ca­zio­ni di chat, modifica col­la­bo­ra­ti­va di documenti o dashboard live. At­tra­ver­so l’uso di socket web, che con­sen­to­no una co­mu­ni­ca­zio­ne bi­di­re­zio­na­le, le ap­pli­ca­zio­ni Node.js possono ri­spon­de­re im­me­dia­ta­men­te alle in­te­ra­zio­ni degli utenti. Grazie al ciclo degli eventi asincrono, Node.js è inoltre in grado di gestire molte con­nes­sio­ni si­mul­ta­nee senza ritardi per­ce­pi­bi­li. È pertanto una scelta adatta per le ap­pli­ca­zio­ni in cui i tempi di latenza devono essere mantenuti al minimo.

Strumenti e au­to­ma­zio­ni

Node.js viene spesso uti­liz­za­to anche per la creazione di strumenti di sviluppo e au­to­ma­zio­ne. Questo include strumenti di build, task runner o script che au­to­ma­tiz­za­no compiti ri­cor­ren­ti. Anche strumenti CLI per l’am­mi­ni­stra­zio­ne o attività DevOps possono essere fa­cil­men­te svi­lup­pa­ti in Node.js, poiché la piat­ta­for­ma offre accesso diretto al file system, alla rete e alle funzioni del sistema operativo.

Framework popolari per Node.js

Node.js co­sti­tui­sce la base per numerosi framework che fa­ci­li­ta­no no­te­vol­men­te lo sviluppo. Questi framework astrag­go­no compiti ri­cor­ren­ti, for­ni­sco­no strutture per un codice pulito e offrono fun­zio­na­li­tà integrate che riducono i tempi di sviluppo. Tra i framework più noti e uti­liz­za­ti ci sono Express, Nest e Socket.io, ognuno con proprie priorità e campi d’ap­pli­ca­zio­ne.

Express.js

Express.js è uno dei framework più diffusi per Node.js e viene uti­liz­za­to prin­ci­pal­men­te per creare ap­pli­ca­zio­ni web e API RESTful. È mi­ni­ma­li­sta, fles­si­bi­le e consente agli svi­lup­pa­to­ri e alle svi­lup­pa­tri­ci di integrare midd­leware per­so­na­liz­za­ti per gestire le richieste HTTP, con­trol­la­re il routing e fornire risposte. Grazie alla sua struttura snella, Express è adatto sia per prototipi rapidi che per ap­pli­ca­zio­ni complesse. Una vasta comunità supporta numerose esten­sio­ni che offrono funzioni ag­giun­ti­ve come au­ten­ti­ca­zio­ne, gestione delle sessioni o motori di template. Express astrae molti dettagli del modulo HTTP nativo di Node.js, per­met­ten­do agli svi­lup­pa­to­ri e alle svi­lup­pa­tri­ci di creare ap­pli­ca­zio­ni server ef­fi­cien­ti e ma­nu­te­ni­bi­li.

Nest.js

Nest.js è un framework pro­gres­si­vo che punta prin­ci­pal­men­te su struttura, sca­la­bi­li­tà e sicurezza dei tipi. Utilizza per im­po­sta­zio­ne pre­de­fi­ni­ta Ty­pe­Script, ma supporta anche Ja­va­Script puro e si ispira ar­chi­tet­to­ni­ca­men­te al framework Angular. Nest facilita l’im­ple­men­ta­zio­ne di API, mi­cro­ser­vi­zi e ap­pli­ca­zio­ni lato server offrendo De­pen­den­cy Injection, moduli di­chia­ra­ti­vi e un sistema di pattern unificato. Il framework è par­ti­co­lar­men­te indicato per progetti di grandi di­men­sio­ni, in cui un’ar­chi­tet­tu­ra pulita e la ma­nu­ten­zio­ne a lungo termine sono fon­da­men­ta­li.

Socket.io

Socket.io è un framework per lo sviluppo di ap­pli­ca­zio­ni in tempo reale che consente la co­mu­ni­ca­zio­ne bi­di­re­zio­na­le tra client e server. Si basa sui socket web, ma offre fun­zio­na­li­tà ag­giun­ti­ve come fallback per browser più vecchi, co­mu­ni­ca­zio­ne basata su eventi e ri­con­nes­sio­ni au­to­ma­ti­che. È spesso uti­liz­za­to in ap­pli­ca­zio­ni dove è ne­ces­sa­rio lo scambio immediato di dati tra server e client. L’in­te­gra­zio­ne in progetti Node.js è semplice, poiché il framework fornisce un’API facile per inviare e ricevere messaggi. Grazie alla sua ar­chi­tet­tu­ra robusta, gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci possono costruire sistemi in tempo reale scalabili che ri­spon­do­no in modo af­fi­da­bi­le e per­for­man­te a molte con­nes­sio­ni si­mul­ta­nee.

I software IA di IONOS
Scopri la potenza del­l'in­tel­li­gen­za ar­ti­fi­cia­le
  • Siti web in tempo record
  • Soluzioni IA per il tuo business
  • Risparmio di tempo e risultati ec­cel­len­ti

Confronto con PHP e Python

Node.js si distingue dalle classiche lingue lato server come PHP e Python so­prat­tut­to per la sua ar­chi­tet­tu­ra a eventi e non bloccante. Mentre PHP tra­di­zio­nal­men­te avvia un nuovo processo per ogni richiesta e percorre l’intero flusso per ciascuna, Node.js gestisce molte richieste si­mul­ta­nee in modo asincrono all’interno di un unico processo, il che può aumentare con­si­de­re­vol­men­te le pre­sta­zio­ni in caso di carico elevato. Python, invece, è versatile e adatto per lo sviluppo web, l’analisi dei dati e l’ap­pren­di­men­to au­to­ma­ti­co, ma utilizza per im­po­sta­zio­ne pre­de­fi­ni­ta ope­ra­zio­ni I/O bloccanti, per cui nelle ap­pli­ca­zio­ni in tempo reale sono necessari framework ag­giun­ti­vi come Asyncio.

Un’altra dif­fe­ren­za risiede nel lin­guag­gio di pro­gram­ma­zio­ne stesso: Node.js si basa su Ja­va­Script, che può essere uti­liz­za­to sia nel browser che lato server. Ciò consente agli svi­lup­pa­to­ri e alle svi­lup­pa­tri­ci di usare un lin­guag­gio unico su tutto lo stack, mentre PHP è limitato al server e Python nei progetti web è ge­ne­ral­men­te combinato con framework come Django o Flask.

Node.js è par­ti­co­lar­men­te adatto per ap­pli­ca­zio­ni in tempo reale, API e mi­cro­ser­vi­zi, mentre PHP è ancora spesso usato per ap­pli­ca­zio­ni web classiche o sistemi di gestione dei contenuti. Python, d’altra parte, si distingue per la sua sem­pli­ci­tà e per le sue librerie estese in una varietà di casi d’uso. Alla fine, la scelta della tec­no­lo­gia dipende dai requisiti in­di­vi­dua­li: Node.js offre vantaggi in termini di per­for­man­ce e sca­la­bi­li­tà, PHP si distingue nei progetti web tra­di­zio­na­li, e Python è ec­cel­len­te per ap­pli­ca­zio­ni ana­li­ti­che e intensive di dati.

Le migliori pratiche in Node.js per chi muove i primi passi

Per iniziare con Node.js è par­ti­co­lar­men­te im­por­tan­te svi­lup­pa­re buone abitudini di pro­gram­ma­zio­ne fin dall’inizio per scrivere codice pulito, sicuro e man­te­ni­bi­le. Un aspetto centrale è la strut­tu­ra­zio­ne del progetto:

  • Separa lo­gi­ca­men­te i moduli.
  • Usa cartelle per percorsi, con­trol­lo­ri, modelli e funzioni di supporto.
  • Evita file mo­no­li­ti­ci lunghi.

Anche la gestione degli errori gioca un ruolo fon­da­men­ta­le in Node.js, poiché la natura asincrona può fa­cil­men­te portare a crash im­pre­vi­sti. Usa blocchi Try-Catch nel codice sincrono e callback degli errori o .catch() nel caso di Promises. Nelle ap­pli­ca­zio­ni Express, dovresti im­ple­men­ta­re un midd­leware centrale per la gestione degli errori, per gestire in modo coerente gli errori im­pre­vi­sti e mantenere l’ap­pli­ca­zio­ne stabile.

Un altro punto da non tra­scu­ra­re è la sicurezza. Evita l’ese­cu­zio­ne di input utente non validati, utilizza il binding dei parametri nelle query al database e proteggi i dati sensibili tramite variabili d’ambiente. Inoltre, si consiglia di ag­gior­na­re re­go­lar­men­te le di­pen­den­ze, ve­ri­fi­ca­re le vul­ne­ra­bi­li­tà di sicurezza con strumenti come npm audit e usare HTTPS per crit­to­gra­fa­re la co­mu­ni­ca­zio­ne.

Inoltre, non ri­spar­mia­re su log e mo­ni­to­rag­gio: registra errori, eventi im­por­tan­ti e metriche di pre­sta­zio­ne per rilevare problemi tem­pe­sti­va­men­te. Per progetti più grandi, vale la pena uti­liz­za­re strumenti come ESLint per garantire coerenza nel codice ed evitare fonti comuni di errore.

Infine, chi è agli inizi dovrebbe preferire la sintassi Async/Await, poiché migliora la leg­gi­bi­li­tà dei processi asincroni e facilita la gestione degli errori.

Vai al menu prin­ci­pa­le