Node JS per principianti
Corso completo Web Developer - Parte 3 - 3.1
Introduzione
Benvenuto/a nella sezione Backend di questo corso! In questa sezione impareremo a scrivere codice lato server con Node JS.
Emanuele partiamo dalle fondamenta...che cosa vuol dire lato server?
Non preoccuparti, di tanto in tanto volontariamente utilizzo termini anche se non ci siamo ancora bene soffermati sulla loro spiegazione. Questo perchè quando affronteremo il concetto in questione avrai già sentito il termine e quindi ti sarà più facile connettere tutti i punti insieme.
Man mano che andiamo avanti vedremo che cosa significa lato server mentre stiamo praticando questo concetto. Per quanto la teoria è parte importante di quando si sta cercando d'imparare un nuovo concetto, la pratica aiuta molto di più a capire realmente il concetto e di conseguenza a ricordarlo.
Quindi man mano che andiamo avanti vedremo che cosa significa scrivere codice lato server (backend) rispetto a scrivere codice lato client (frontend).
Come funziona la Node REPL
Iniziamo finalmente a provare Node JS. Apriamo il terminale o la Windows Power Shell ed eseguiamo al suo interno la console di Node JS. Per farlo eseguiamo il comando node
:
node
Come facciamo ad uscire dalla console di Node JS? E' molto semplice, basta digitare .exit
e premere invio:
node
.exit
In realtà si può uscire dalla console in vari modi e .exit
è solo un esempio. Vediamoli insieme:
.exit
Ctrl + C
(per due volte di seguito)Ctrl + D
Questa che vedi è la console di Node JS, chiamata REPL (Read-Eval-Print-Loop).
Questa console ci permette di eseguire codice JavaScript in tempo reale. Vediamo un esempio:
node
console.log("Hello World")
Che cosa significa "Read Eval Print Loop" ? Praticamente significa che la console di Node JS legge il codice che scriviamo, lo esegue, stampa il risultato e aspetta per il prossimo comando per ripetere il processo.
Quindi all'interno della Node REPL puoi eseguire codice JavaScript allo stesso modo in cui lo faresti nella console del Browser o in un file JavaScript che viene eseguito nel browser.
Una cosa da tenere presente però è che alcune cose che abbiamo utilizzato nella sezione JavaScript della parte Frontend del corso non saranno disponibili in Node JS. Vediamo un esempio:
node
document // ReferenceError: document is not defined
Se per esempio provassimo ad eseguire document
vedremo che questo non sarà disponibile. Questo perchè document
fa parte di una API disponibile nel Browser e non in Node JS utilizzato nel Backend.
Un'altra API molto utilizzata nel Frontend ma che non è disponibile nel Backend è window
.
Eseguire un file JavaScript con Node
Abbiamo visto come utilizzare la REPL ma questa è molto limitante in termini di utilizzo e logica che possiamo scrivere. Per poter scrivere della logica più complessa abbiamo bisogno di un vero e proprio file JavaScript che poi possiamo eseguire con Node JS.
Iniziamo a creare un file JavaScript. Crea una cartella per questa parte del corso e crea un file chiamato app.js
. Al suo interno scrivi il seguente codice:
console.log("Hello World")
Ora eseguiamo il file app.js
con Node JS. Per farlo eseguiamo il comando node
nel terminale seguito dal nome del file:
const randomName = 'John Doe';
console.log(randomName); // John Doe
Assicurati di essere nella cartella dove hai creato il file app.js
altrimenti il comando non funzionerà .
Come puoi vedere quando esegui soltanto il comando node
la console REPL viene aperta mentre quando esegui il comando node
e di seguito passi il nome del file questo verrà eseguito e vedrai l'output nella console.
Questo è come possiamo eseguire un file JavaScript nel Backend con Node JS! Complimenti per aver eseguito per la prima volta del codice basico lato server con Node JS!
L'obiettivo della parte Backend di questo corso è d'imparare le fondamenta dello Sviluppo Web. Magari ti starai chiedendo il perchè.
Lo Sviluppo Web è un'ottima porta d'ingresso nel mondo della programmazione. Vieni esposto/a a tanti concetti che sono transferibili in altri settori della programmazione.
Detto ciò, due cose importanti da sapere nel Backend con Node JS sono process
e argv
. Andiamoli a scoprire insieme cosa sono.
Cosa sono Process e Argv
process
e argv
sono due oggetti che sono disponibili in Node JS nel "global scope". Questo significa che sono a nostra disposizione ovunque scriviamo JavaScript lato server.
process
è un oggetto che contiene informazioni sul processo corrente. Questo oggetto è molto utile per ottenere informazioni sul processo corrente.
Supponiamo di avere una cartella chiamata cataloghi
e dentro di essa un file chiamato dati.txt
. Se volessimo leggere il contenuto di questo file all'interno del nostro programma dovremmo specificare il percorso completo del file dati.txt
.
Una funzione molto comune utilizzata con l'oggetto process
è process.cwd()
che ci permette di ottenere il percorso della cartella corrente.
Supponiamo che la cartella cataloghi
sia la cartella in cui siamo locati nel terminale e che questa cartella si trovi sul Desktop, il percorso completo del file dati.txt
sarà :
/Users/username/Desktop/cataloghi/dati.txt
Se volessimo ottenere il percorso completo del file dati.txt
all'interno del nostro programma possiamo utilizzare process.cwd()
:
console.log(process.cwd()); // /Users/username/Desktop/cataloghi
Un'altra funzione molto utile è process.argv
che ci permette di ottenere i parametri passati al programma quando viene eseguito.
Questo ci tornerà utile quando abbiamo una logica nel nostro file JavaScript che per funzionare ha bisogno di alcuni parametri.
Per esempio supponiamo di avere un file JavaScript che prende in input un nome e un cognome e stampa il nome completo. Possiamo passare questi parametri al programma quando lo eseguiamo con il comando node
.
node app.js John Doe
In questo caso nota che eseguiamo il comando node
dopodichè passiamo il nome del file app.js
ed infine diamo due argomenti: John
e Doe
. Questi due sono i parametri che passiamo al programma quando viene eseguito. All'interno del programma possiamo accedere a questi parametri con process.argv
.
Ora che abbiamo letto le basi di cwd
e argv
possiamo passare alla parte più interessante del corso e mettere in pratica questi concetti.
Nella prossima sezione impareremo che cos'è il modulo File System (fs
) e come possiamo utilizzarlo con process.cwd()
e process.argv
per creare dei file che compongono la struttura base di un progetto: index.html
, style.css
e app.js
.
Il modulo File System
Man mano che utilizzeremo Node JS scopriremo che questo ha tutta una serie di oggetti e funzioni che sono disponibili soltanto in Node JS e che sono assenti in JavaScript nel Frontend.
Questo perchè nonstante Node JS sia basato su JavaScript, la logica che viene sviluppata per il Backend risolve problemi diversi rispetto a quelli che vengono risolti con il Frontend (lato client e lato server).
Il modulo File System
o fs
è un modulo presente in Node JS e molto utile quando vogliamo lavorare con files e cartelle. Questo modulo ci permette di creare, leggere, modificare e cancellare files e cartelle nel nostro computer attraverso codice JavaScript. Interessante, no?! 😃
Perchè non proviamo ad automatizzare la creazione del modello base di un progetto Frontend che ha tre files: index.html
, style.css
e app.js
? Questo ora lo possiamo fare attraverso l'utilizzo del modulo fs
! 🚀
Ad esempio il nostro modello base di progetto potrebbe essere così:
NomeProgetto (cartella)
- index.html
- style.css
- app.js
Iniziamo a scrivere codice JavaScript adesso!
touch boilerplate.js (in Windows PowerShell usa il comando "New-Item" al posto di "touch")
Ora apriamo il file boilerplate.js
e scriviamo il seguente codice:
const fs = require('fs');
const folderName = process.argv[2] || 'Project';
try {
fs.mkdirSync(folderName);
fs.writeFileSync(`${folderName}/index.html`, '');
fs.writeFileSync(`${folderName}/style.css`, '');
fs.writeFileSync(`${folderName}/app.js`, '');
console.log('folder and files created', folderName);
} catch (e) {
console.log('something went wrong', e);
}
Spieghiamo cosa stiamo facendo.
Prima di tutto importiamo il modulo fs
con const fs = require('fs');
.
Dopodichè creiamo una costante folderName
che contiene il nome della cartella che vogliamo creare. Il nome della cartella viene passato come argomento al programma quando viene eseguito. Se non viene passato alcun argomento il nome della cartella che verrà assegnto come default sarà Project
.
A questo punto chiamiamo la funzione fs.mkdirSync
che ci permette di creare la cartella del nostro progetto frontend.
Una volta che la cartella viene creata possiamo creare i files al suo interno. Quindi chiamiamo la funzione fs.writeFyleSync
per creare i files index.html
, style.css
e app.js
.
Abbiamo scritto il codice all'interno di un try/catch
block per riuscire a gestire eventuali errori nel caso dovessero esserci.
Ora che abbiamo scritto il codice JavaScript possiamo eseguirlo con il comando node
:
node boilerplate.js myNewProject
Al posto di myNewProject
possiamo passare il nome che vogliamo dare alla cartella che verrà creata.
A questo punto avremo una nuova cartella con il nome che abbiamo passato al comando node
ed al suo interno i files per un progetto base Frontend, tutto creato con Node JS!
Conclusione
Ed eccoci arrivati alla fine della prima lezione di programmazione web Backend con Node JS! 🎉
In questa lezione abbiamo imparato:
- Che cos'è la Node REPL
- Come eseguire un file JavaScript con il comando
node
- Le basi di
process.cwd()
eprocess.argv
- Il modulo
fs
e come possiamo utilizzarlo per creare una cartella e dei files
È stata una bella lezione come introduzione al Backend, no? 😃
Nella prossima lezione andremo a vedere come possiamo integrare librerie di codice esterne nei nostri software attraverso l'utilizzo di NPM
. Preparati! 🚀