Skip to content

Instantly share code, notes, and snippets.

@withArtur
Last active June 26, 2025 15:10
Show Gist options
  • Save withArtur/b2de6c0173a26e424c65243890135a4c to your computer and use it in GitHub Desktop.
Save withArtur/b2de6c0173a26e424c65243890135a4c to your computer and use it in GitHub Desktop.
Basi Nodejs - process

Node.js Process Object - Guida Essenziale

🚀 Proprietà più Usate

process.argv

Array degli argomenti passati da linea di comando.

Avete provato a fare?
console.log('Hello World');

console.log(process.argv[2]);
console.log(process.argv[3]);
console.log(process.argv[4]);

// Comado: node app.js ciao hola hi
// Output: 
// ciao 
// hola
// hi 

// E se vogliamo passare nome e cognome come unico argomento?
console.log("Hello " + process.argv[2]);
// Comando: node app.js Artur Mamedov
// Output: Hello Artur

// Quindi vale la regole delle stringhe come in Javascript:
// - Se qualcosa vuoi delimitare, le apici o le virgolette devi usare 
console.log("Hello " + process.argv[2]);
// Comando: node app.js "Artur Mamedov"
// Output: Hello Artur Mamedov


// Comando: node app.js Marco 25
console.log(process.argv);
// Output: ['node', '/path/to/app.js', 'Marco', '25']

// Argomenti utente (senza node e script)
const userArgs = process.argv.slice(2);
console.log(userArgs); // ['Marco', '25']

process.env

Oggetto con tutte le variabili d'ambiente.

// Leggere variabili d'ambiente
console.log(process.env.NODE_ENV); // 'development' o 'production'
console.log(process.env.PORT || 3000); // Porta con fallback

// Settare variabili (solo per il processo corrente)
process.env.MY_VAR = 'valore personalizzato';

process.cwd()

Restituisce la directory di lavoro corrente.

console.log(process.cwd()); // '/Users/marco/my-project'

// Cambiare directory
process.chdir('/altra/directory');
console.log(process.cwd()); // '/altra/directory'

process.exit()

Termina il processo con un codice di uscita.

// Uscita normale
process.exit(0);

// Uscita con errore
process.exit(1);

// Uscita con codice personalizzato
if (error) {
  console.error('Errore fatale!');
  process.exit(2);
}

🔍 Proprietà Informative

process.platform

Identifica il sistema operativo.

console.log(process.platform);
// Possibili valori: 'win32', 'darwin', 'linux', 'freebsd', etc.

if (process.platform === 'win32') {
  console.log('Stai usando Windows');
} else if (process.platform === 'darwin') {
  console.log('Stai usando macOS');
}

process.version e process.versions

Informazioni sulla versione di Node.js e dipendenze.

console.log(process.version); // 'v18.17.0'

console.log(process.versions);
// {
//   node: '18.17.0',
//   v8: '10.2.154.26-node.26',
//   npm: '9.6.7',
//   ...
// }

process.pid

ID del processo corrente.

console.log(process.pid); // 12345
console.log(process.ppid); // ID del processo padre

📡 Stream di Input/Output

process.stdout / process.stderr / process.stdin

Stream per output, errori e input.

// Scrivere su stdout (equivale a console.log)
process.stdout.write('Hello World!\n');

// Scrivere su stderr
process.stderr.write('Errore!\n');

// Leggere da stdin
process.stdin.setEncoding('utf8');
process.stdin.on('data', (input) => {
  console.log(`Hai scritto: ${input.trim()}`);
});

🎯 Event Handling

process.on()

Ascolta eventi del processo.

// Catturare CTRL+C
process.on('SIGINT', () => {
  console.log('Ricevuto SIGINT. Uscita in corso...');
  process.exit(0);
});

// Catturare errori non gestiti
process.on('uncaughtException', (error) => {
  console.error('Errore non catturato:', error);
  process.exit(1);
});

// Promise rifiutate non gestite
process.on('unhandledRejection', (reason, promise) => {
  console.error('Promise rifiutata:', reason);
});

// Prima dell'uscita del processo
process.on('exit', (code) => {
  console.log(`Processo in uscita con codice: ${code}`);
});

💡 Esempi Pratici

CLI Tool Semplice

// cli.js
const args = process.argv.slice(2);
const command = args[0];

switch (command) {
  case 'help':
    console.log('Uso: node cli.js <comando>');
    break;
  case 'version':
    console.log(`Versione Node.js: ${process.version}`);
    break;
  default:
    console.log('Comando non riconosciuto. Usa "help".');
    process.exit(1);
}

Graceful Shutdown

let server = require('http').createServer(/* ... */);

function gracefulShutdown() {
  console.log('Chiusura in corso...');
  server.close(() => {
    console.log('Server chiuso.');
    process.exit(0);
  });
}

process.on('SIGTERM', gracefulShutdown);
process.on('SIGINT', gracefulShutdown);

Environment Check

function checkEnvironment() {
  const requiredVars = ['DATABASE_URL', 'SECRET_KEY'];
  
  for (const envVar of requiredVars) {
    if (!process.env[envVar]) {
      console.error(`Variabile ${envVar} mancante!`);
      process.exit(1);
    }
  }
  
  console.log('Ambiente configurato correttamente ✅');
}

checkEnvironment();

🚨 Best Practices

  1. Sempre gestire uncaughtException e unhandledRejection
  2. Usare process.exit() con parsimonia - preferire return o throw
  3. Validare process.env all'avvio dell'applicazione
  4. Implementare graceful shutdown per applicazioni server
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment