Node.js: usare gli argomenti da riga di comando

Short link

Quando si esegue Node.js dalla riga di comando tramite il comando node si possono passare degli argomenti separati da uno spazio a tale comando.

Node memorizza gli argomenti passati nell'array process.argv. Quando si esegue questo file:


'use strict';

const echo = console.log;

let args = process.argv;

args.forEach((arg, index) => {
    echo('Argomento ' + index + ': ' + arg);
});

in questo modo:


node arguments.js test

otterremo:


Argomento 0: /usr/local/bin/node
Argomento 1: /home/user/arguments.js
Argomento 2: test

L'errore che spesso si commette è quello di pensare che il primo elemento dell'array sia l'argomento passato al file da eseguire. In realtà l'argomento effettivo occupa la terza posizione nell'array con indice 2.

Di conseguenza gli argomenti effettivi partono dalla posizione con indice 2 in poi. A differenza di Java, gli argomenti da riga di comando seguono la filosofia della tipizzazione debole di JavaScript: in Node sono tutti di tipo string.

La validazione consiste innanzitutto nel verificare se gli argomenti effettivi siano presenti o meno:


'use strict';

let args = process.argv;

if(args.length >= 3) {
   // C'è almeno 1 argomento effettivo
}

Quindi si può validare il formato dell'argomento ricordando che stiamo validando stringhe:


'use strict';
const validator = require('validator');

let args = process.argv;

if(args.length >= 3) {
   let arg = args[2];
   if(!validator.isInt(arg)) {
       throw new Error('Integer required!');
   }
}

Il package validator valida unicamente stringhe, quindi è il più indicato per la validazione del formato degli argomenti.

Se il tipo di dati passato non corrisponde, è bene interrompere immediatamente l'esecuzione del codice sollevando un errore. In caso contrario non riusciremmo a procedere oltre.