‫Jonas: Ora implementiamo un gestore di route
‫per le richieste di posta in modo da poter effettivamente aggiungere un Natour al
‫nostro set di dati.
‫Quindi, proprio come con il gestore
‫di richieste doGET(), iniziamo aggiungendo un nuovo percorso.
‫Quindi app. post questa volta, e ricorda
‫che ora usiamo post so il metodo post
‫qui, perché questo è il tipo di richiesta che vogliamo gestire.
‫Quindi le richieste che vengono fatte con il verbo post http giusto?
‫V1
‫e tour.
‫Proprio come abbiamo detto nella lezione sull'API REST, l'URL
‫è in realtà esattamente lo stesso.
‫Non importa se vogliamo ottenere tutti i tour
‫o se vogliamo creare un nuovo tour,
‫l'URL è esattamente lo stesso.
‫Quindi l'unica cosa che cambia è il metodo http
‫che abbiamo usato per fare queste richieste.
‫Per ottenere tutti i tour e postare per creare un
‫nuovo tour, quindi qui, la nostra tipica
‫funzione di call-back in cui otteniamo
‫l'accesso alla richiesta e all'oggetto di risposta in modo da poter
‫ottenere alcuni dati dalla richiesta e inviare un appropriato risposta.
‫Ora ricorda che con una
‫richiesta post, possiamo inviare dati dal client al server, giusto?
‫Questi dati sono quindi idealmente disponibili su richiesta.
‫L'oggetto della richiesta è di nuovo ciò che contiene tutti i
‫dati, tutte le informazioni, sulla richiesta che è stata fatta.
‫Se quella richiesta contiene alcuni dati che
‫sono stati inviati, quei dati dovrebbero essere sulla richiesta, giusto?
‫Ora, fuori dagli schemi, Express non inserisce i dati del
‫corpo nella richiesta e, per avere quei dati disponibili,
‫dobbiamo usare qualcosa chiamato middleware.
‫Parleremo in dettaglio del middleware in un
‫paio di lezioni, ma per
‫ora, per farlo funzionare,
‫dobbiamo includere un semplice middleware qui all'inizio del file.
‫Quindi, in realtà, proprio qui.
‫Quello che dobbiamo fare è dire app. usa quindi esprimi.
‫json Va bene, e basta.
‫Quindi di nuovo, questo [express. json] ecco il middleware.
‫E il middleware è fondamentalmente una
‫funzione che può modificare i dati della richiesta in entrata.
‫Si chiama middleware perché sta nel
‫mezzo, quindi nel mezzo della richiesta e della risposta.
‫È solo un passaggio che la
‫richiesta viene eseguita durante l'elaborazione.
‫E il passaggio attraverso cui passano le richieste,
‫in questo esempio, è semplicemente che i dati dal corpo vengono aggiunti ad esso.
‫Quindi viene aggiunto all'oggetto richiesta utilizzando
‫questo middleware.
‫Usiamo app. use per usare il middleware come questo.
‫E ancora, parleremo molto di più del
‫middleware un po' più avanti in questa sezione.
‫Per ora, sappi solo che questo è il modo in cui usiamo il middleware.
‫Tutti i dettagli seguiranno poi in seguito.
‫Quindi per ora, solo per iniziare,
‫voglio mostrarti i dati dal corpo nella console, solo
‫per verificare che funzioni effettivamente, quindi req. corpo.
‫Di nuovo, il corpo è
‫la proprietà che sarà disponibile su richiesta, perché
‫abbiamo usato quel middleware un paio di momenti fa.
‫Quindi vogliamo log[req. body] alla console e
‫quindi dobbiamo anche inviare una risposta.
‫Quindi ris. invia e per ora solo qualche segnaposto qui.
‫"Fatto" va bene.
‫Quindi abbiamo
‫sempre bisogno di restituire qualcosa per
‫completare il cosiddetto ciclo di richiesta/risposta, di cui impareremo un po'
‫di più più avanti in questa sezione.
‫Quindi ora proviamo questo
‫e creiamo una nuova richiesta per il post.
‫Ora qui in postino, possiamo fare
‫qualcosa di veramente carino, ovvero salvare tutte queste richieste.
‫Inizierò creando una
‫nuova collezione, che chiamerò Natours.
‫Nuova collezione.
‫Ora salverò questa richiesta all'interno di quella raccolta.
‫Quindi questo è Ottieni tutti i tour.
‫Mettilo in Natours e salva.
‫Quindi ora abbiamo le nostre richieste Get proprio qui.
‫Bene, ora copiamo questo qui, creiamone
‫uno nuovo.
‫Quindi questa è una richiesta di posta.
‫Prima di farlo,
‫lo salverò anche direttamente in questa raccolta.
‫Quindi crea un nuovo tour.
‫Qui sul lato sinistro, ora abbiamo entrambe le nostre richieste.
‫Ora specifichiamo effettivamente il nostro corpo qui, quindi i
‫dati che fondamentalmente vogliamo inviare al server.
‫Veniamo qui a Body e ora ci sono diversi modi
‫per farlo, ma il più semplice
‫è semplicemente dire Raw, e poi Application JSON.
‫Tutto ciò che dobbiamo fare qui è sostanzialmente specificare alcuni
‫JSON e questo verrà quindi trasmesso al server.
‫Quindi la prima cosa che vogliamo specificare
‫è il nome del
‫Tour, e ti ricordi che in JSON, tutto deve essere
‫tra virgolette e in realtà virgolette doppie, non solo virgolette.
‫Consentitemi di chiamare questo
‫tour di prova e diamo un'occhiata a cos'altro abbiamo nei dati del tour.
‫Quindi abbiamo il nome, abbiamo la durata, e
‫mettiamo anche la difficoltà.
‫Quindi non ho intenzione di specificare tutti questi
‫perché richiede troppo tempo.
‫Diciamo solo che la durata
‫è di 10 giorni e la difficoltà è
‫facile.
‫Che come il nostro corpo verrà trasmesso al server.
‫Quindi questo è stato testato ora, premendo invio e qui riceviamo
‫la nostra risposta, che è fatta, ricorda.
‫Ecco la risposta che abbiamo inviato, così fatto.
‫E vedi che qui nella nostra console,
‫ora abbiamo un oggetto che è
‫fondamentalmente il JSON che abbiamo inviato nel nostro corpo, giusto?
‫Così perfetto, funziona!
‫Non è più JSON, come puoi vedere.
‫È veramente un oggetto JavaScript.
‫Solo per mostrarti che avevamo
‫davvero bisogno del middleware, commentiamo questo.
‫Inviarlo di nuovo.
‫Ora non hanno più la richiesta. corpo, giusto?
‫Ecco perché ora è indefinito, perché non esiste più.
‫Salvalo, invia di nuovo la
‫nostra richiesta e così ora è tornato.
‫Abbiamo impostato il nostro
‫percorso di post, ora funziona e abbiamo anche accesso al corpo,
‫quindi quello che vogliamo fare ora è effettivamente
‫mantenere quei dati in questo semplice file JSON del tour.
‫In realtà modificheremo questo file, in modo che i dati
‫vengano salvati nel nostro database fittizio qui.
‫Questo file JSON in questo momento funziona come
‫il nostro database fittizio.
‫Quindi ora occupiamoci di questo.
‫Vado avanti e commento questo.
‫Quindi iniziamo.
‫La prima cosa che
‫dobbiamo fare è capire l'id del nuovo oggetto.
‫Ricorda, ancora nella lezione
‫sulle API REST, che quando creiamo un nuovo oggetto,
‫non specifichiamo mai l'id dell'oggetto.
‫Il database di solito si occupa di questo.
‫Un nuovo oggetto di solito ottiene automaticamente il suo nuovo id.
‫Bene, in questo caso, non abbiamo alcun database, quindi quello
‫che faremo è semplicemente prendere
‫l'id dell'ultimo oggetto e quindi aggiungere +1 a quello.
‫Facciamolo molto velocemente, e questo è solo JavaScript
‫di base.
‫Quindi newId è tour, giusto?
‫Ricorda che tour, abbiamo già i dati
‫in questa variabile tour.
‫Quindi questo è un
‫array di tutti gli oggetti tour, e quindi vogliamo
‫ottenere l'ultimo, che è tour. length - 1, quindi la
‫proprietà id di quella e aggiungiamo + 1.
‫Quindi questo è il nuovo ID.
‫Successivamente, creiamo un nuovo tour
‫e quel tour sarà
‫fondamentalmente il corpo che inviamo più il nuovo id che abbiamo appena creato.
‫Quindi possiamo usare oggetto. assegnare, che sostanzialmente ci permette
‫di creare un nuovo
‫oggetto unendo due oggetti esistenti insieme.
‫Quindi il
‫primo oggetto sarà id=newId,
‫e poi vogliamo
‫request. corpo.
‫Potremmo anche aver fatto req. corpo. id=newId, ma
‫non volevo mutare l'oggetto corpo originale.
‫L'ho lasciato così.
‫Questo è il nuovo tour, e
‫ora quello che vogliamo fare è inserire questo tour nell'elenco dei tour, giusto?
‫Quindi tour, è la serie dei nove tour
‫che abbiamo a questo punto.
‫Diciamo spingi e spingi il nuovo tour lì dentro.
‫Questo è l'array che ora contiene il nuovo tour, ma
‫ovviamente ora dobbiamo mantenerlo nel file.
‫Anche in questo caso è abbastanza facile per te
‫a questo punto, quindi usa fs. scrivere file.
‫Quindi quale dovremmo usare?
‫writeFile o writeFileSync?
‫La risposta è molto semplice.
‫Siamo all'interno di una funzione di call-back, che
‫verrà eseguita nel ciclo degli eventi.
‫Non possiamo mai, mai bloccare il ciclo degli eventi.
‫Quello che faremo è usare
‫writeFile e non Sync in questo.
‫Vogliamo passare una funzione di call-back
‫che verrà elaborata in background e non
‫appena sarà pronta, inserirà il suo evento
‫in una delle
‫code del ciclo di eventi, che verrà quindi gestita non appena il ciclo
‫di eventi passa quella fase.
‫Ricordi quello dalla lezione di Event Loop?
‫Ad ogni modo, prendiamo il nome
‫del file da qui, perché sovrascriveremo davvero questo file
‫in modo che quando riavvieremo questo
‫server, sarà lì.
‫Quindi
‫dove- proprio qui.
‫Quindi questo è il file in cui vogliamo scrivere.
‫I dati che vogliamo scrivere, che sono tour, e quindi
‫la nostra funzione di call-back, che in questo
‫caso ha solo l'errore.
‫Qui ho appena notato
‫che dobbiamo stringere anche questo oggetto, giusto?
‫Vogliamo json in questo
‫file JSON, e questo in questo momento
‫è solo un normale oggetto JavaScript e quindi dobbiamo convertirlo.
‫Ma questo è di nuovo semplice, l'ho già fatto.
‫JSON. stringa dell'oggetto.
‫Cosa vogliamo fare non appena il file è scritto?
‫Bene, quello che facciamo di solito è inviare l'oggetto appena
‫creato come risposta.
‫Facciamolo.
‫Quindi risposta,
‫e quindi come sempre, iniziamo specificando il codice di stato.
‫In questo caso, non sarà un 200, ma un 201.
‫Quindi 201 che significa creato.
‫200 sta per okay, 201 sta
‫per creato, che è esattamente quello che è successo qui.
‫Abbiamo creato una nuova risorsa su un server.
‫Quindi JSON, e continua ad aggiungere questo messaggio qui.
‫Lo stato è di nuovo, il successo.
‫Non sto usando la proprietà dei risultati
‫qui, che avevamo prima, perché ora sto inviando solo un risultato.
‫I dati sono la nostra busta qui.
‫Il tour è un nuovo tour.
‫Questo è tutto!
‫Salvalo qui
‫e così formattalo o codifica un po '.
‫Aggiungiamo un po' più di spazio qui.
‫Penso che ora siamo pronti per fare un tentativo.
‫Possiamo effettivamente creare un nuovo tour, utilizzando questi dati qui.
‫Quindi aggiusta questo Test Tour, e con
‫questi dati, e aspettiamo.
‫Cos'è successo qua?
‫Vediamo, ah ok.
‫Abbiamo un problema per cui abbiamo inviato una risposta due volte sostanzialmente.
‫Quindi abbiamo inviato una risposta con JSON e
‫poi di nuovo con . Inviare.
‫Non è permesso.
‫Questo è il motivo per cui riceviamo questo errore qui.
‫Quindi è davvero bello che sia successo qui, in modo che tu
‫sappia cosa significa questo errore standard qui.
‫HTTP_HEADERS_SENT non può impostare le intestazioni dopo che
‫sono state inviate al client.
‫Ciò accade quando provi a inviare due risposte.
‫Dobbiamo liberarci di questo.
‫Sì, è stato l'unico errore che abbiamo avuto.
‫Ora dovrebbe risolverlo.
‫Provaci.
‫E infatti, ci siamo.
‫Quindi abbiamo il nostro id
‫di 10, che il nostro codice ha creato per noi, e poi l'intero
‫tour che sono esattamente i dati che abbiamo inviato come corpo nella nostra richiesta.
‫Ora il fatto è che quando avremo tutti
‫i tour qui, non apparirà ancora.
‫Se scendiamo qui, in realtà
‫è già qui.
‫Abbiamo quello di prima, quindi quando abbiamo avuto quell'errore,
‫in realtà ha creato anche questo tour qui.
‫Poi, ovviamente, il tour che abbiamo creato con l'id 10.
‫Quindi questo tour qui è esattamente questo che
‫è stato creato proprio ora.
‫Se lo facciamo ora, Test Tour 2, con la durata di appena 5.
‫Proviamo con questo, e se riesco a fare tutti i tour, allora
‫compare anche qui.
‫Ho detto all'inizio che non avrebbe funzionato, quindi non sarebbe apparso
‫subito, perché funziona
‫solo se riavviamo il server.
‫Questo file, il tour-semplice.
‫json da cui provengono i nostri
‫tour, viene letto solo all'inizio quando avviamo il server.
‫Ora il fatto è che ogni volta che salviamo qualcosa in
‫questo file JSON, ricaricherà anche il server.
‫Lascia che te lo dimostri, quindi se premo ora
‫salva, guarda cosa succede qui sotto.
‫Quindi lo salvo, e così vedete che
‫quaggiù ha riavviato il server.
‫Ha anche formattato il codice, perché è più carino.
‫Ma ciò che conta qui è che questo codice sia aggiornato.
‫Ecco perché ogni volta che salviamo qualcosa
‫qui con la nostra
‫API, ricaricherà immediatamente il server e ricaricherà il
‫contenuto dal file nei tour, e possiamo quindi leggerlo subito.
‫Ecco perché abbiamo
‫accesso immediato a tutti i tour appena creati.
‫Ha senso?
‫Bene, in caso
‫contrario, sentiti libero di porre le tue domande e, naturalmente, la sezione Q&A, giusto?