La tua prima Console App: un convertitore di valuta
Mettiamo in pratica ciò che abbiamo imparato creando un'applicazione interattiva da riga di comando con ES Modules.
È il momento di smettere di leggere e iniziare a costruire! Dopo aver studiato l’asincronia e NPM, siamo pronti per creare un vero script interattivo che gira direttamente nel tuo terminale.
In questo tutorial realizzeremo un Convertitore di Valuta professionale, imparando a gestire l’input dell’utente e a formattare i dati in uscita.
Assicurati di avere “type”: “module” nel tuo
package.json come visto nell’articolo precedente.
Preparare il Progetto
Se hai seguito la guida dall’inizio, puoi creare una nuova sottocartella nella directory progetti-nodejs:
mkdir convertitore-valuta
cd convertitore-valuta
npm init -y
Poi aggiungi "type": "module" al package.json generato. Crea il file per il convertitore:
# Linux/macOS
touch converter.js
# Windows (PowerShell)
New-Item converter.js -ItemType File
Il modulo Interfaccia: readline
Node.js include un modulo integrato chiamato readline. Questo strumento è fondamentale per creare interazioni “botta e risposta” nel terminale. Per funzionare, si collega a due flussi (stream) di dati:
- process.stdin: lo “Standard Input” (quello che scrivi sulla tastiera).
- process.stdout: lo “Standard Output” (quello che vedi sullo schermo).
Il modulo readline è basato su eventi. Vedremo come gestire la chiusura dell’interfaccia per evitare che il programma rimanga “appeso” in attesa di dati.
Sviluppo del Convertitore
Apri converter.js nel tuo editor e incolla il codice seguente. Nota come utilizziamo lo standard moderno degli ES Modules per importare le funzionalità.
import readline from "node:readline"
// Configurazione dell'interfaccia di comunicazione
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
})
console.log("-----------------------------------------")
console.log(" BENVENUTO NEL CONVERTITORE EUR -> USD ")
console.log("-----------------------------------------")
// Chiediamo l'input all'utente
rl.question("Inserisci l'importo in Euro (€): ", (amount) => {
const eur = parseFloat(amount.replace(",", ".")) // Gestiamo anche la virgola italiana
if (isNaN(eur)) {
console.error("\n❌ Errore: Per favore, inserisci un numero valido.")
} else {
const rate = 1.08 // Tasso di cambio fittizio
const usd = (eur * rate).toFixed(2)
console.log(`\n✅ Risultato: ${eur}€ equivalgono a circa $${usd} USD.`)
console.log("-----------------------------------------")
}
// Fondamentale: chiudere l'interfaccia altrimenti il processo non termina
rl.close()
})
Guida all’Esecuzione
Per testare la tua app, segui questi passaggi:
- Apri il terminale nella cartella del progetto.
- Verifica il file: assicurati che
converter.jssia salvato correttamente. - Lancia lo script:
node converter.js - Interagisci: inserisci un numero e premi Invio.
Analisi del Codice
Perché abbiamo scritto il codice in questo modo?
Usiamo import readline from “node:readline”. Il prefisso
node: è la best practice moderna per distinguere i moduli
integrati da quelli installati tramite NPM.
Utilizziamo parseFloat() e isNaN(). Un’app
professionale non deve mai crashare se l’utente sbaglia a digitare, ma deve
fornire un feedback chiaro.
Chiamando rl.close(), diciamo a Node.js che abbiamo finito di
usare la tastiera. Se dimentichi questo comando, il cursore continuerà a
lampeggiare all’infinito nel terminale.
Hai creato la tua prima app interattiva, ma Node.js è nato per il web. Nel prossimo e ultimo articolo costruiremo un vero server HTTP che risponde dal browser.