‫Istruttore: Bentornato.
‫In questo video imparerai tutto
‫sulle variabili d'ambiente.
‫Quindi cosa sono, come li impostiamo e come li usiamo.
‫Non si tratta esattamente di Express, ha davvero a
‫che fare con lo sviluppo del nodo JS in generale, ma
‫ne abbiamo davvero bisogno per andare
‫avanti nel progetto e quindi questo è un
‫buon momento per parlarne.
‫Quindi il nodo JS o le app Express
‫possono essere eseguite in ambienti diversi.
‫E i più importanti sono l'ambiente di sviluppo
‫e l'ambiente di produzione.
‫Questo perché, a seconda dell'ambiente, potremmo utilizzare database
‫diversi, ad esempio, o potremmo attivare o
‫disattivare l'accesso, o potremmo attivare o disattivare
‫il debug, o davvero tutti
‫i tipi di impostazioni diverse che potrebbero
‫cambiare a seconda dello sviluppo che noi' re dentro.
‫Quindi, ancora una volta, i più importanti sono lo
‫sviluppo e l'ambiente di produzione.
‫Ma ci sono altri ambienti
‫che i team più grandi potrebbero utilizzare.
‫Quindi questo tipo di impostazione
‫che ho appena menzionato, come diversi database o accessi
‫attivati o disattivati, sarà basato su variabili di ambiente.
‫Ora per impostazione predefinita, Express imposta l'ambiente su sviluppo, il che
‫ha molto senso perché è quello che facciamo quando
‫iniziamo un nuovo progetto.
‫Quindi, solo per dimostrazione,
‫diamo un'occhiata a quella variabile
‫e lo faremo qui nel server.
‫Quindi ricorda che tutto ciò che non è correlato
‫a Express lo faremo al di fuori dell'app. file JS.
‫Quindi usiamo solo questo qui per configurare la nostra applicazione.
‫Quindi usiamo questo solo per configurare tutto
‫ciò che ha a che fare con l'applicazione Express.
‫Ma le variabili d'ambiente sono davvero al di
‫fuori dell'ambito di Express.
‫Quindi facciamo rapidamente una console. accedi
‫qui dell'app. prendi
‫e poi finisci.
‫Salvalo qui e qui sotto puoi vedere lo sviluppo.
‫Permettetemi di cancellare la console qui, salvarla di nuovo e
‫quindi di nuovo qui vedete lo sviluppo.
‫Quindi questo è l'ambiente in cui ci troviamo attualmente.
‫E così vedi che questa app. getenv ci darà
‫la variabile d'ambiente env.
‫Quindi, in sintesi, le variabili di ambiente sono variabili globali utilizzate
‫per definire l'ambiente in cui è in esecuzione
‫un'app del nodo.
‫Quindi questo è impostato da
‫Express, ma lo stesso nodo JS imposta effettivamente molti ambienti.
‫Ora questa variabile env qui è effettivamente impostata da
‫Express, ma il nodo JS stesso in realtà
‫imposta anche molte variabili d'ambiente.
‫E quindi diamo un'occhiata anche a quelli.
‫Quindi questi si trovano nel processo. avv.
‫Dagli un salvataggio
‫e quindi qui abbiamo un mucchio di variabili diverse
‫ok e non le esaminerò tutte, ma vediamo solo che sono davvero un mucchio
‫di esse e il nodo ne usa la maggior
‫parte internamente.
‫Ad esempio un'attività nella directory di
‫lavoro corrente qui in questa variabile d'ambiente e
‫davvero un sacco di altre cose come puoi vedere.
‫Ad esempio la mia cartella
‫home o il mio nome di accesso, vedi lo script che usiamo per avviare questo
‫processo, quindi davvero un mucchio di cose che per qualche motivo
‫il nodo JS ha bisogno internamente.
‫Ora queste variabili, provengono dal modulo principale
‫del processo e siamo impostate nel momento in cui il processo è iniziato.
‫E come vedi, non dovevamo richiedere il modulo di
‫processo giusto.
‫È semplicemente disponibile ovunque automaticamente.
‫Ora in Express, molti pacchetti
‫dipendono da una variabile speciale chiamata nodo N.
‫Quindi è una variabile che
‫è una specie di convenzione che dovrebbe definire se
‫siamo in fase di sviluppo o di produzione, va bene.
‫Tuttavia Express non definisce
‫realmente questa variabile, quindi dobbiamo farlo manualmente.
‫E ci sono molti modi in cui
‫possiamo farlo, ma iniziamo con il più
‫semplice che è usare il terminale.
‫Quindi finirò questo
‫processo qui, lo cancellerò e quindi l'ultima volta che abbiamo avviato
‫questo processo lo abbiamo fatto usando npm start.
‫E npm start a sua volta sta per dov'è?
‫Quindi sta per nodemon server.
‫E quindi copiamo questo in realtà qui.
‫Quindi usiamo il server nodemon. js per avviare il processo.
‫Ma se vuoi impostare
‫una variabile d'ambiente per questo processo,
‫dobbiamo pre-pianificare quella variabile con questo comando.
‫Quindi diciamo
‫nodeenv, che è quella variabile speciale
‫di cui ho appena parlato uguale allo
‫sviluppo.
‫E se inizio questo processo ora, diamo un'occhiata.
‫E quindi in questo momento abbiamo qui il nodo N impostato su sviluppo.
‫E quindi questo è il risultato di questa console. processo di disconnessione.
‫avv.
‫E quindi
‫quella variabile che abbiamo qui in realtà deriva da quel comando.
‫E possiamo effettivamente definire ancora di più se volessimo.
‫Quindi diciamo solo che X è 23
‫solo per scopi di test, avvia il processo e ora vedi
‫che la variabile d'ambiente X è collegata a questa stringa 23.
‫Quindi, ancora una volta, molti pacchetti su
‫npm che usiamo per lo sviluppo
‫Express dipendono effettivamente da questa variabile di ambiente.
‫Quindi, quando il nostro progetto
‫è pronto e lo distribuiremo, dovremmo cambiare il nodo N e la variabile in produzione.
‫E lo faremo ovviamente una volta distribuito il
‫progetto entro la fine del corso.
‫Quindi impostiamo il nodo N
‫e X come variabili di ambiente, ma possiamo fare molto di più.
‫E questo perché di solito usiamo
‫variabili d'ambiente come le impostazioni di configurazione per le nostre applicazioni.
‫Pertanto, ogni volta che la nostra app necessita di una configurazione
‫per elementi che potrebbero cambiare in base all'ambiente in cui è in esecuzione
‫l'app, utilizziamo le variabili di ambiente.
‫Ad esempio, potremmo utilizzare database diversi per lo
‫sviluppo e per il test fino a definire
‫una variabile per ciascuno e quindi
‫attivare il database giusto in base all'ambiente.
‫Inoltre potremmo impostare dati sensibili
‫come password e nome utente utilizzando le variabili di ambiente.
‫Ora non è molto pratico definire
‫sempre tutte queste variabili nel comando
‫in cui avviamo l'applicazione.
‫Quindi immagina
‫di avere 10 variabili ambientali e non sarebbe molto pratico
‫doverle scrivere tutte qui all'interno di questo comando.
‫E così, invece, quello che facciamo è creare un file di configurazione.
‫Quindi lasciami andare avanti e
‫creare config. avv.
‫E quindi env è
‫davvero la convenzione per definire un file che è queste variabili di ambiente.
‫E il codice VS lo
‫riconosce effettivamente e inserisce questa icona di configurazione direttamente nel file.
‫Quindi ora definiamo questa variabile qui
‫e la incolliamo qui.
‫E possiamo
‫anche usare alcuni di questi dati sensibili che ho appena menzionato.
‫Quindi diciamo che
‫l'utente è Jonas in minuscolo e la password è uno, due, tre, quattro, cinque, sei.
‫Ora, come vedi, questi nomi di variabili di
‫solito sono sempre in maiuscolo.
‫Quindi è una specie di convenzione che usiamo.
‫Ora nel tuo codice VS probabilmente
‫tutto il testo è solo bianco, quindi non hai l'evidenziazione della sintassi.
‫E ce l'ho perché lo usano. estensione env qui.
‫Quindi se vuoi il tuo . env per avere un bell'aspetto, per favore
‫vai avanti e installa quello.
‫Quindi abbiamo la password dell'utente, definiamo
‫anche la porta su cui dovrebbe essere in esecuzione la nostra app.
‫Quindi è anche una specie
‫di variabile standard che di solito si trova in un file . env come questo.
‫E impostiamo questo a 8.000.
‫Ora come lo colleghiamo effettivamente. env con la nostra
‫applicazione nodo?
‫Quindi abbiamo bisogno
‫di un modo per leggere queste variabili da questo file
‫e poi salvarle come variabili di ambiente.
‫Perché in questo momento questo è solo
‫un file di testo e il nodo JS non ha modo di sapere che queste variabili sono qui.
‫E quindi per questo lo standard utilizza un
‫pacchetto npm chiamato . avv.
‫Quindi npm install. env, va
‫bene,
‫allora andiamo
‫al nostro server e richiediamo effettivamente quel modulo.
‫Quindi cost. env è uguale a
‫require. env, così semplice.
‫E quaggiù possiamo
‫semplicemente usare questa variabile dotenv chiamata
‫config su di essa e poi lì dentro dobbiamo solo passare un oggetto per specificare
‫il percorso in cui si trova il nostro file di configurazione.
‫Quindi percorso, config
‫dotenv.
‫E quindi ciò che
‫questo comando farà ora
‫è leggere le nostre variabili dal file e salvarle nelle variabili di ambiente JS del nodo.
‫Quindi ora eseguiamo npm start e questo
‫dovrebbe quindi bloccare tutte le nostre
‫variabili di ambiente sulla console a causa di questa riga di codice.
‫E quindi aspettiamo, e infatti qui abbiamo nodeenv,
‫abbiamo la porta, le
‫password e, naturalmente, il resto dei dati dovrebbe essere da qualche parte
‫qui all'interno di questo elenco gigantesco.
‫Non importa dove sia qui.
‫Quindi l'utente era in realtà Jonas. io già e quindi
‫dovremmo chiamare questo qui nome utente.
‫Quindi salvalo nuovamente qui
‫per eseguire nuovamente il server, e quindi ora abbiamo un nome
‫utente qui sotto e quindi queste sono le quattro variabili d'ambiente
‫che sono definite nel nostro file.
‫Ottimo, e solo per finire, ora andiamo avanti e usiamo questa
‫variabile nodeenv e anche la variabile port.
‫E per farlo andiamo in app. js e da qualche parte qui la porta
‫dovrebbe essere definita e da qualche parte qui abbiamo il middleware del logger orale
‫e quello che voglio fare ora
‫è eseguire solo quel middleware in modo da definirlo
‫solo quando siamo effettivamente in fase di
‫sviluppo, in modo che l'accesso non avvenga quando il
‫l'app è in produzione
‫Quindi ce l'abbiamo proprio qui, quindi
‫andiamo avanti e
‫diciamo se il processo. avv. nodeenv è uguale a
‫sviluppo bene solo allora usa Morgan.
‫Ora
‫ti starai chiedendo perché abbiamo effettivamente accesso a questa
‫variabile d'ambiente qui quando non le abbiamo davvero definite in questo file ma nel server. js.
‫E la risposta è che la lettura delle
‫variabili dal file che avviene qui al processo del nodo
‫deve avvenire solo una volta.
‫È quindi nel processo e il processo è
‫ovviamente lo stesso, non importa in quale file ci troviamo.
‫Quindi siamo sempre nello
‫stesso processo e le variabili d'ambiente sono nel processo.
‫E quindi il processo in esecuzione, quindi dove è
‫in esecuzione la nostra applicazione è sempre
‫lo stesso e quindi questo è disponibile per noi in
‫ogni singolo file nel progetto.
‫Quindi è così che usiamo questa variabile, ora torniamo
‫al server e diciamo che la porta dovrebbe
‫essere quella proveniente
‫dalle variabili di ambiente o questa 3.000.
‫Quindi processo. avv. porto o 3.000.
‫Ora c'è qualcosa che non va qui, diamo un'occhiata, e oh vedo
‫che sto già usando 8.000 in alcune altre applicazioni che
‫sono in esecuzione da qualche parte
‫sul mio computer.
‫E quindi lasciami effettivamente andare avanti e
‫cambiarlo anche qui a 3.000.
‫Ma non importa, puoi lasciare il tuo a 8.000
‫se funziona per te.
‫Cancellalo qui, salvalo di nuovo e ora funziona.
‫Puoi anche sbarazzarti di questa console. log qui perché non abbiamo
‫bisogno di vedere queste variabili tutto il tempo.
‫E ora facciamo rapidamente una richiesta http
‫per vedere se il nostro logger funziona ancora e lo farò di
‫nuovo qui postino, quindi
‫questo, tornando indietro, e ora il nostro login è andato.
‫Bene, vediamo perché.
‫Quindi lo abbiamo qui in fase di sviluppo che è corretto.
‫E quindi questo dovrebbe effettivamente funzionare, quindi
‫anche qui è corretto, sviluppo.
‫Bene, facciamo una console. log
‫e dai un'occhiata a un livello,
‫ma qui non siamo definiti.
‫Quindi controlliamo cosa sta succedendo qui, e quindi sì, vedo il problema
‫che è effettivamente necessario
‫il file dell'app
‫prima che le nostre variabili di ambiente vengano lette dal file di configurazione.
‫E quindi deve essere il contrario.
‫Quindi lascia che lo sposti qui e
‫solo dopo vogliamo eseguire il codice che si
‫trova nel file up.
‫E solo dopo vogliamo eseguire il codice
‫che si trova nel file up.
‫Quindi di nuovo non siamo riusciti a leggere la
‫variabile di processo all'interno dell'app. js perché non era ancora configurato.
‫Quindi, se gli diamo un salvataggio ora, allora
‫vedrai davvero lo sviluppo qui.
‫E se facciamo la nostra richiesta ora, inviamola, poi ovviamente
‫ci riavremo indietro il nostro logger.
‫Quindi ora funziona.
‫E ora finalmente come ultimo
‫test, aggiungiamo un nuovo script di avvio al nostro pacchetto. json.
‫Quindi in questo momento abbiamo avviato il server nodemon, ma voglio
‫anche aggiungerne un altro per la produzione solo
‫in modo da poter testare cosa succede in quella situazione.
‫Quindi avvia prod, quindi
‫fammi chiamare l'altro dev, quindi in produzione vogliamo
‫semplicemente impostare la variabile nodeenv su produzione.
‫Quindi nodenv è uguale alla
‫produzione e poi il resto è lo stesso.
‫Quindi
‫nodenv, server. js.
‫Quindi finiamo
‫questo qui npm run start
‫production.
‫E così ora
‫vedi che la nostra variabile nodeenv è effettivamente impostata su produzione.
‫Quindi proviene da questa console. accedi qui.
‫E se
‫ora facciamo questa richiesta, non otterremo il nostro logger.
‫Quindi non è qui come prima.
‫E quindi questo è fondamentalmente il modo in cui
‫eseguiamo codice diverso a seconda che siamo in fase di sviluppo o produzione.
‫Quindi liberiamoci di questo qui,
‫possiamo chiudere
‫anche questo, e quindi torniamo al nostro
‫script di sviluppo ovviamente, quindi npm run
‫start dev e tutto a posto.
‫Solo un ultimo test
‫e infatti ecco il nostro risultato di accesso.
‫Quindi questo è tutto per le variabili d'ambiente, passiamo alla
‫lezione finale di questa sezione.