Federico Lelli / SchoolNode.js & Express
LEZIONE 04 · Fondamenti

Oggetti globali e process

Prima di iniziare: le parole della lezione

Globale e ambito del modulo
Un globale è disponibile senza importazione. L’ambito del modulo contiene nomi validi solo in quel file: le variabili dichiarate con const non diventano automaticamente proprietà globali.
process e variabile d’ambiente
process descrive il processo Node. Una variabile d’ambiente è un valore di configurazione esterno al codice, letto con process.env.
Callback e timer
Una callback è una funzione passata a un’altra funzione perché la richiami. Un timer pianifica una callback dopo un intervallo minimo, senza garantirne l’istante esatto.

In Node.js trovi globali come console, setTimeout, process e globalThis. Il corso usa anche __dirname, __filename, require e module: sono disponibili nei moduli CommonJS, non allo stesso modo nei moduli ESM.

// index.cjs (CommonJS)
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(process.env.NODE_ENV ?? 'non definito');
setTimeout(() => console.log('Dopo 200 ms'), 200);
// index.mjs (ES modules): alternativa moderna
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
const filename = fileURLToPath(import.meta.url);
const directory = dirname(filename);
console.log(directory);

NODE_ENV è una convenzione: non garantisce da sola che il codice sia sicuro o configurato correttamente. Evita di stampare in log l'intero process.env, perché può contenere segreti.

Chi fa cosa, e perché

__dirname indica la cartella del modulo CommonJS che lo contiene; __filename ne indica il percorso completo. process.cwd() indica invece la cartella da cui hai avviato il processo. Se importi un file da una sottocartella, il suo __dirname cambia, ma cwd() resta quello del processo, salvo modifiche esplicite.

require carica un modulo e module ne rappresenta il contesto CommonJS: non sono normali globali universali. globalThis è il nome standard dell’oggetto globale, ma condividere dati tramite globali rende più difficile capire chi li modifica.

Un altro esempio guidato

// configurazione.cjs — node configurazione.cjs
const porta = Number(process.env.PORT ?? 3000);
if (!Number.isInteger(porta) || porta < 1 || porta > 65535) {
  console.error('PORT deve essere un intero tra 1 e 65535');
  process.exitCode = 1;
} else {
  console.log('Porta configurata:', porta);
}

Come leggerlo e risultato atteso. Senza configurazione stampa 3000. I valori di process.env sono normalmente stringhe: Number converte il testo, il controllo scarta valori non validi. exitCode = 1 comunica un esito di errore quando il processo termina.

Prova tu. In PowerShell esegui $env:PORT = "4000" e poi lo script: deve leggere 4000. Con Remove-Item Env:PORT rimuovi la variabile dalla shell corrente.

Torna all’indice ↑

Materiali didattici curati e rielaborati da Federico Lelli. Le fonti e i riferimenti specifici sono indicati nei materiali disponibili.