‫Istruttore: Bentornato.
‫Quindi spero che questa sezione ti sia piaciuta finora e che ti
‫diverta a lavorare con Node. js.
‫Quindi ora andiamo avanti nel
‫nostro progetto e costruiamo un'API web estremamente semplice.
‫Ora, per iniziare, cos'è in realtà un'API?
‫Bene, la risposta lunga, imparerai
‫in una delle prossime sezioni, ma per ora, la risposta breve,
‫almeno in questo contesto di API web, in pratica,
‫un'API è un servizio da cui possiamo richiedere alcuni dati, quindi in
‫questo caso, i dati che l'utente vuole richiedere sono dati
‫sui prodotti che stiamo offrendo in
‫questa farm di nodi, quindi in questo progetto.
‫Quindi ho qui questa cartella dev-data, e lì dentro ho
‫un file JSON e JSON, nel caso non lo sapessi, è
‫un formato di testo molto semplice
‫che assomiglia molto all'oggetto JavaScript, quindi
‫assomiglia a questo , e possiamo avere array,
‫che in realtà abbiamo, quindi abbiamo un
‫grande array, che contiene questi cinque oggetti e
‫ogni oggetto ha l'ID, il nome del prodotto, l'immagine
‫e così via.
‫Ora ognuno di questi deve essere una stringa per ciascuna delle
‫chiavi, e quindi abbiamo il valore.
‫Quindi, in pratica, questi dati qui sono ciò che la nostra
‫API invierà al cliente quando richiesto.
‫Quindi avremo ancora un altro percorso qui.
‫Quindi proprio qui, altrimenti se il nome del percorso è uguale a /api.
‫E per ora, come segnaposto, invieremo semplicemente l'API proprio
‫in questo modo.
‫Quindi quello che vogliamo fare ora è leggere effettivamente i
‫dati da questo file qui, quindi analizzare JSON in JavaScript e
‫quindi inviare il risultato al client.
‫Quindi qualcosa di molto semplice e quindi mettiamoci al lavoro.
‫Quindi il primo approccio per farlo
‫è entrare in questo percorso e quindi leggere il file qui
‫usando la funzione di lettura del file, giusto?
‫Quindi iniziamo facendo così.
‫Quindi f. e in realtà è readFile,
‫non fileRead, quindi readFile e quindi il nome del file.
‫Ora, ricorda come ti ho detto prima
‫che questo non è l'unico modo per localizzare il nostro
‫file nel file system.
‫Per ora usiamolo ancora, ma dopo
‫averlo scritto qui, ti mostrerò
‫un altro modo.
‫Quindi, una nota, questo punto qui in realtà si riferisce alla directory
‫da cui eseguiamo il comando node nel terminale.
‫Quindi, di nuovo, questo punto
‫qui in questo momento rappresenta questa cartella corrente
‫qui perché è lì che eseguiamo effettivamente il comando node, quindi
‫in questa cartella 1-node-farm, che è comunque
‫la nostra directory di lavoro corrente in questo caso, ma
‫potremmo avere esegui il comando node da
‫qualche altra parte, quindi il punto significherebbe qualcos'altro.
‫Quindi, ad esempio, potremmo trovare perfettamente, andare sul desktop
‫ed eseguire node lì, quindi specificare l'intero
‫percorso da indicizzare. js, ma potremmo farlo, ma
‫poi in questo caso, il punto significherebbe il desktop, quindi se avviassimo
‫lo script dal desktop, allora questo
‫qui, questo punto, significherebbe il desktop,
‫e quindi non è sempre l'ideale , e quindi,
‫c'è un modo migliore.
‫Quindi tutti i nodi. js, ottengono
‫l'accesso a una variabile chiamata dirname e quella variabile
‫si traduce sempre nella directory in cui si
‫trova lo script che stiamo attualmente eseguendo.
‫Quindi in questo caso, in realtà è lo
‫stesso posto perché index. js è anche in
‫questa cartella della farm del nodo, ma ancora una
‫volta, per i motivi che ho
‫menzionato prima, è molte volte una pratica migliore usare la variabile
‫dirname, quindi facciamolo e per questo
‫creiamo una stringa modello, e
‫poi usiamo la variabile, quindi è __dirname, che sta per directory name.
‫E quindi di solito lo facciamo così.
‫Ora c'è un'eccezione a questa
‫regola, che è la funzione require.
‫Quindi, quando richiediamo moduli,
‫possiamo effettivamente richiedere i nostri moduli, e lo faremo
‫un po' più tardi, come nel prossimo,
‫o in uno dei due prossimi video, e lì
‫dentro, il punto in realtà significa anche l'attuale funzionamento directory e non il
‫luogo da cui stiamo eseguendo lo script.
‫Quindi tieni presente che la funzione require è un'eccezione
‫a questa regola, ma di solito
‫il punto è dove è
‫in esecuzione lo script e __dirname è dove si trova il file corrente.
‫Bene, ora passiamo a specificare la codifica del file utf-8,
‫quindi la nostra funzione di callback, che è prima l'errore,
‫ricorda, e quindi ora abbiamo accesso a questi dati.
‫Ora i dati sono in JSON, e quindi in JavaScript, abbiamo
‫qualcosa integrato che si chiama JSON. analizzare.
‫E quindi questo prenderà il codice
‫JSON, che in
‫realtà è una stringa, e quindi lo trasformerà automaticamente in JavaScript, quindi
‫un oggetto o un array JavaScript in questo caso.
‫Chiamiamo questo prodotto ProductData e
‫quindi diamo anche un rapido sguardo ad esso.
‫Quindi nella console in questo caso.
‫Quindi, riavviando il server, e ora, non dimenticare di
‫premere il percorso / api, e oh, cosa sta succedendo qui?
‫Oh, abbiamo effettivamente riavviato il server.
‫E così ora otteniamo
‫un'API di risposta e ora diamo
‫un'occhiata qui, in realtà, all'oggetto dati del prodotto.
‫Quindi questo è solo un bell'oggetto, con tutti i
‫dati che avevamo in questi dati. json file.
‫Bene, ora il passaggio successivo è inviare
‫effettivamente questi dati come risposta.
‫Ora questa risposta. Il metodo
‫end qui deve effettivamente restituire una stringa e non un oggetto qui.
‫E quindi, in effetti, ciò che vogliamo restituire
‫sono i dati direttamente, quindi i dati sono una stringa che abbiamo poi trasformato
‫in un oggetto usando JSON. parse, ma per ora,
‫in realtà non avremmo bisogno di farlo, ma l'ho fatto
‫comunque perché ne avremo bisogno in
‫seguito quando inizieremo a costruire i nostri modelli HTML.
‫Ecco quando avremo bisogno di questi
‫dati in un formato JavaScript.
‫Per ora, vogliamo solo restituire la stringa effettiva
‫che riceviamo.
‫Ora, prima di poterlo fare, dobbiamo effettivamente
‫specificare, quindi dobbiamo
‫dire al browser che stiamo inviando indietro JSON, quindi proprio come prima,
‫dove impostiamo il tipo di contenuto su text/html, ora
‫dobbiamo dire a browser che stiamo inviando JSON.
‫Quindi diciamo ris. writeHead proprio come prima, e
‫ora stiamo usando il codice di stato
‫200, che sta per okay, e quindi l'oggetto delle intestazioni.
‫In questo caso, sarà solo uno,
‫quindi Content-type e quando inviamo JSON, dobbiamo dire application/json.
‫Quindi per HTML, è text/html, per
‫JSON, è application/json, e
‫ora diamo un'occhiata a questo.
‫Ricarica il server qui molto velocemente, e
‫infatti, qui abbiamo la nostra API che restituisce tutti i dati
‫sui nostri cinque prodotti.
‫Fantastico, è fantastico, ed è fantastico, ma in realtà non
‫è perfetto, perché non
‫è realmente efficiente al 100%, ed
‫è perché ogni volta che qualcuno ora raggiunge questo
‫percorso /api, il file dovrà essere letto e
‫poi rispedito .
‫Invece, quello che possiamo fare è leggere il file
‫solo una volta all'inizio, e poi ogni volta che qualcuno
‫percorre questa strada, semplicemente rispedire i
‫dati senza doverli leggere ogni volta che un utente ha richiesto.
‫Ha senso?
‫Bene, quello che farò è metterlo qui fuori.
‫Ok, e ovviamente non ho bisogno di tutto questo, quindi
‫questo non è qui, e questo
‫non è qui, e
‫in realtà sarà un po' diverso, e
‫questo perché ora useremo effettivamente la versione sincrona, e so
‫cosa stai pensando, che è che
‫la versione sincrona blocca l'esecuzione del codice, giusto?
‫E mentre questo è vero, in
‫questo caso, non è
‫affatto un problema, e questo perché il
‫codice di livello superiore in realtà viene eseguito solo una volta all'inizio.
‫Solo questa funzione di callback, ad esempio, qui,
‫quella createServer, quindi questa funzione qui, questo è ciò che viene
‫eseguito ogni volta che c'è una
‫nuova richiesta, ma non un codice che è qui fuori.
‫Il codice che è al di fuori
‫delle funzioni di callback, quindi il cosiddetto codice di primo livello,
‫viene sempre eseguito solo una volta avviato il programma, quindi
‫in quella situazione non importa se blocca l'esecuzione,
‫perché di nuovo, succede solo una
‫volta e solo quando il codice si avvia effettivamente, giusto?
‫Ha senso?
‫E quindi useremo la versione di sincronizzazione ora
‫perché in realtà è più facile gestire
‫quei dati, perché semplicemente mette i dati in una variabile
‫che non possiamo usare subito.
‫Quindi non preoccuparti del fatto che questa funzione sia bloccante perché, ancora
‫una volta, è nel codice di livello superiore
‫e viene eseguita solo una volta.
‫Il segreto qui è semplicemente sapere
‫quale codice viene eseguito solo una volta e solo
‫all'inizio e quale codice viene eseguito più e più volte,
‫ed è quindi problematico quando si blocca il ciclo degli eventi.
‫E naturalmente, durante
‫il resto di questo grande, grande corso, lo imparerai.
‫Quindi imparerai tutto sul ciclo degli eventi, e
‫quale codice sta bloccando e quale no, e perché, quindi questa
‫è solo la prima volta che lo menziono, ma
‫non sarà l'ultima volta.
‫Mi sentirai ripetere sempre le stesse cose.
‫Quindi, chiamando solo questo dato, e poi, ovviamente, non abbiamo bisogno di
‫niente di tutto questo.
‫Spostiamolo qui fuori e basta.
‫Quindi, prima che accada qualcosa, leggerà i dati
‫dal file JSON in dati.
‫Quindi lo analizzerà anche in un oggetto.
‫Chiamiamolo qui dataObject, quindi quello che faremo qui è
‫non leggere questo file ogni volta che
‫c'è una richiesta, e invece, semplicemente
‫inviare indietro i dati che abbiamo ora nel nostro codice di
‫primo livello.
‫Quindi questi dati qui ora provengono da qui perché, ovviamente, questo
‫codice nella funzione di callback ha
‫accesso al codice di livello superiore a causa della catena dell'ambito, giusto?
‫Annullamento, esecuzione di nuovo e solo per dimostrarti
‫che funziona ancora, e funziona.
‫Così perfetto, ed è meglio, è più efficiente, oh, e
‫perché l'ho chiuso?
‫Va bene, apriamolo di nuovo molto velocemente.
‫Quindi eccoci qui.
‫Quindi questa è la nostra API molto semplice, che ora consente all'utente
‫di richiedere semplicemente tutti i dati sulla nostra applicazione
‫con una singola chiamata API, in pratica.
‫Quindi abbiamo aggiunto un'altra route qui,
‫/api, quindi abbiamo letto il file
‫in modo sincrono, lo abbiamo inserito in questo
‫oggetto e quindi abbiamo semplicemente inviato indietro
‫quell'oggetto come risposta, ma prima, specificando che stiamo rimandando application/json, quindi che
‫il browser sa esattamente cosa aspettarsi, e nei prossimi
‫due video
‫inizieremo effettivamente a costruire l'interfaccia utente, quindi
‫questa è la parte più eccitante, giusto?