‫Istruttore:
‫Quindi in questa lezione
‫imparerai un modo semplice per definire i parametri
‫direttamente nell'URL, come leggere questi parametri
‫e anche come rispondere ad essi.
‫Ora, ciò che vogliamo effettivamente implementare in questa lezione
‫è un modo per ottenere un solo tour.
‫Quindi in questo momento, abbiamo questo punto
‫finale qui, che ci dà
‫tutti i tour, e vogliamo avere qualcosa del genere.
‫Quindi copiamolo in una nuova richiesta per
‫ora, quindi vogliamo slash e poi l'ID del tour.
‫Quindi, per esempio, diciamo cinque, ok?
‫Quindi, è proprio come abbiamo
‫parlato nella lezione sull'API REST, in
‫cui ho detto che se raggiungessimo questo endpoint senza alcun ID, quindi proprio
‫come questo qui, beh,
‫allora avremmo tutti i tour.
‫Ma se dopo di ciò dovessimo specificare un ID, così,
‫proprio così, e ovviamente
‫non deve essere un ID, può
‫essere un qualsiasi identificatore univoco, ma in
‫questo caso, il modo più semplice per implementarlo
‫è semplicemente usa gli ID, ok?
‫Quindi, questa qui è ovviamente una variabile, perché
‫può essere cinque, ma può anche essere qualsiasi altra cosa.
‫E quindi questo pezzo dell'URL qui,
‫quindi questo qui, questa è una variabile, ok?
‫E quindi quello
‫che dobbiamo fare è definire un percorso che possa accettare una variabile.
‫Va bene, quindi facciamolo qui, e in
‫realtà subito dopo questo.
‫E vado avanti e lo copio,
‫perché sai già come scriverlo a questo punto.
‫E così, sì.
‫Quindi qui abbiamo il
‫percorso, quindi ora tutto ciò che dobbiamo fare è aggiungere quella variabile.
‫Ed è molto facile.
‫Quindi abbiamo di nuovo la nostra barra e poi
‫la variabile, la definiamo usando i due punti, in questo modo.
‫E così, in questo modo, abbiamo creato una variabile chiamata ID.
‫Potrebbe ovviamente essere qualsiasi
‫altra cosa, come var o X.
‫Non importa.
‫Ma questo si chiama ID, va bene?
‫Ora non vogliamo restituire nulla di
‫simile, quindi commentiamolo.
‫E quello che voglio che tu
‫dia un'occhiata è al
‫log dot della console, req dot params.
‫Ok, quindi request dot params è dove sono archiviati tutti i
‫parametri di tutte le variabili che definiamo qui, ok?
‫Quindi queste variabili qui nell'URL sono chiamate parametri e, di
‫nuovo, sono in req dot params, disponibili
‫per noi da usare ora.
‫Quindi diamo un'occhiata ora e
‫realizziamo questa richiesta.
‫E per ora, non farà nulla,
‫quindi non ci darà il tour
‫numero cinque automaticamente, ovviamente.
‫Ma quello che voglio fare
‫per ora è dare un'occhiata ai parametri dei punti req.
‫E così in effetti, qui abbiamo, l'ID è cinque.
‫Quindi, request dot params è un oggetto
‫molto carino che assegna automaticamente il
‫valore alla nostra variabile, quindi il nostro parametro che abbiamo definito.
‫E potremmo effettivamente definire multipli.
‫Quindi potremmo dire ID,
‫e poi potremmo dire X, e potremmo
‫dire Y, e poi, ovviamente, dovremmo definirli tutti.
‫Quindi 23
‫e 45, diciamo.
‫Manda questo ragazzo.
‫E poi, in effetti, abbiamo
‫un oggetto con tutte e tre queste variabili al loro interno.
‫Ok, ora se li definiamo in questo modo
‫nell'URL, in realtà dobbiamo specificarli.
‫Quindi, se non avessimo il parametro
‫Y, ci imbatteremmo in
‫un errore, perché ora non stiamo raggiungendo questo percorso esatto, ok?
‫Quindi il nostro percorso ora non è più esattamente questo,
‫ma è solo questo.
‫E quindi, c'è un errore, ok?
‫Ha senso?
‫Ora c'è in realtà una cosa che possiamo
‫fare, e cioè i parametri opzionali.
‫Quindi, se vuoi rendere questo parametro facoltativo,
‫aggiungiamo solo un punto interrogativo
‫e ora è facoltativo, quindi non dobbiamo più specificarlo.
‫Quindi proprio così.
‫E così ora abbiamo solo cinque, 23, e poi
‫Y è ancora qui, ma è indefinito, perché
‫ora è opzionale.
‫Va bene.
‫Ma sbarazziamoci di tutto
‫questo, perché ci serve solo l'ID, ok?
‫E quindi ora
‫tutto ciò che dobbiamo fare è ottenere effettivamente il tour
‫con questo ID dai nostri dati. json, dal nostro file JSON, giusto?
‫Quindi, in pratica, dall'array dei tour.
‫E quindi non dovrebbe essere troppo difficile.
‫E quindi diciamo
‫che const tour è uguale
‫a tour dot
‫find.
‫E non sono sicuro che tu abbia familiarità
‫con questo metodo di ricerca qui.
‫Quindi una volta, più questo non ha nulla a che fare
‫con Node o Express, è solo una normale funzione
‫JavaScript che puoi usare sugli array.
‫E il modo in cui funziona è questo.
‫Quindi, qui, passiamo una funzione di callback,
‫e quindi lasciami iniziare scrivendo quella.
‫Quindi l'ID dell'elemento è
‫uguale ai parametri del
‫punto req, ok?
‫Quindi fondamentalmente scorrerà l'array e
‫in ciascuna
‫delle iterazioni avremo accesso all'elemento corrente
‫e restituiremo true o
‫false in ciascuna delle iterazioni, ok?
‫Ora, ciò che farà il metodo find
‫è che fondamentalmente creerà un
‫array che contiene
‫solo l'elemento in cui questo confronto qui risulta essere vero, va bene?
‫E in questa situazione, vogliamo trovare l'elemento
‫in cui l'ID è uguale a
‫quello che otteniamo dai parametri.
‫E quindi specificando questa funzione di callback
‫qui con questo confronto, ci assicureremo
‫che solo l'elemento in cui l'ID è
‫effettivamente uguale all'ID specificato nei
‫parametri verrà restituito dal
‫metodo find e memorizzato in tour, ok?
‫Ora, in realtà, non funzionerà così, perché come vedete
‫quaggiù, questi valori
‫qui, in realtà sono stringhe, ok?
‫Quindi dobbiamo convertirlo in un numero, ma
‫è molto semplice.
‫Tutto quello che dobbiamo
‫fare è dire che l'ID è uguale a req
‫dot params dot ID per uno.
‫Quindi questo è un bel
‫trucco in cui JavaScript, quando moltiplichiamo una stringa che sembra un
‫numero, quando la moltiplichiamo con un
‫altro numero, convertirà automaticamente quella stringa in un numero.
‫Quindi questo è un trucco molto piccolo e carino che possiamo usare qui.
‫E così, ora, abbiamo già il nostro tour pronto per l'invio.
‫E quindi i dati che
‫vogliamo inviare sono tour
‫uguali a tour.
‫O in realtà, è solo
‫un tour, quindi il tour dovrebbe essere uguale al tour, ok?
‫Ha senso?
‫Quindi forse la parte più complicata qui è proprio
‫questa, ma, sì, è di nuovo solo un normale JavaScript.
‫E quindi credo, o almeno spero, che
‫tu abbia già familiarità con
‫l'utilizzo di questo tipo di metodi di array, ok?
‫Quindi, vogliamo solo il tour numero cinque.
‫E quindi diamo un'occhiata se funziona davvero.
‫E beh, non è stato così, quindi diamo un'occhiata a questo.
‫Oh sì, in effetti, qui dobbiamo usare l'ID, ovviamente.
‫Quindi non req. parametri.
‫ID.
‫Ok, allora, riprova.
‫E ora, in effetti, abbiamo il tour con ID di cinque, ok,
‫e solo quel tour singolo.
‫Proviamo il numero due, per
‫esempio, e in effetti, l'ID due.
‫Ma ora, proviamo un'altra situazione.
‫Facciamo, ID 23, e quindi ora non
‫otteniamo nulla in cambio, giusto?
‫E questo perché non esiste un tour con l'ID 23, ma
‫restituiamo comunque il codice di stato 200 OK,
‫quindi non ha molto senso, ok?
‫E quindi andiamo avanti e cambiamo questo.
‫E cosa dovremmo fare qui?
‫Bene, come soluzione molto semplicistica, quello che
‫possiamo fare è controllare se l'ID è
‫più grande della lunghezza dell'array dei tour, e se
‫è più lungo,
‫allora possiamo inviare un errore 404 dicendo
‫che non siamo riusciti a trovare qualsiasi tour per l'ID fornito.
‫Quindi facciamo quella soluzione molto semplice, perché, beh, questa non è
‫la vera API che stiamo costruendo a questo
‫punto, e in
‫questo caso, non è un
‫problema usare una soluzione troppo semplicistica come quella, perché questa
‫non è la cosa reale che stiamo costruendo qui.
‫Stiamo davvero solo cercando di familiarizzare
‫con il modo in cui Express funziona.
‫E la stessa cosa si può effettivamente dire qui,
‫per esempio, quando noi...
‫Quindi quaggiù, dove pubblichiamo un nuovo tour, nel
‫mondo reale, dovremmo sempre, sempre controllare se l'input dell'utente
‫è valido, quindi se non
‫contiene alcun codice dannoso, o davvero, tutto
‫ciò che facciamo t voglio nel nostro involucro.
‫E di nuovo, lo faremo, ovviamente, più
‫tardi, ma in questo
‫piccolo esempio qui, voglio davvero concentrarmi solo sui fondamentali, ok?
‫Quindi implementiamo rapidamente ciò che stavamo appena
‫dicendo, che è che se l'ID è maggiore della lunghezza del punto del tour,
‫quindi per esempio, diciamo che abbiamo 12 tour nel nostro array,
‫beh, se l'ID è quindi 13, o 15, o qualunque cosa,
‫beh, in quel caso, l'ID non è valido.
‫Quindi, diciamo return, ed è perché vogliamo uscire
‫dalla funzione proprio a questo punto, ok?
‫Ed è per questo che diciamo ritorno.
‫Quindi inviamo uno stato di 404, perché non
‫siamo riusciti a trovare alcun tour per quell'ID,
‫e quindi una semplice risposta JSON
‫con uno stato di fail.
‫Quindi fail è ciò che inviamo ogni volta che abbiamo un codice 400.
‫E poi solo una proprietà del messaggio,
‫ID non valido.
‫Va bene.
‫E quindi testiamolo ora.
‫Quindi abbiamo il nostro 23.
‫E, infatti, 404 non trovato, ID non valido.
‫Quindi è esattamente quello che abbiamo appena fatto,
‫e sembra che funzioni, ok?
‫Un'altra soluzione che potremmo
‫ovviamente implementare anche qui
‫sarebbe quella di fare questo
‫test dopo aver fatto il tour qui.
‫Quindi otterremmo l'ID, quindi proveremmo
‫a trovare un tour, e se
‫non ci fosse un
‫tour, allora diremmo che l'ID non è valido.
‫Quindi commentiamo questo, duplicato, solo in
‫modo da mantenere effettivamente entrambe le soluzioni qui.
‫E quindi possiamo dire, se non c'è il tour, ok?
‫Quindi fondamentalmente, il risultato
‫qui, se non viene trovato alcun
‫tour, beh, allora questa variabile è sostanzialmente indefinita
‫e possiamo quindi verificarla qui, in questo modo.
‫Quindi, se non c'è un tour, quindi se il tour è
‫sostanzialmente indefinito, allora inviamo questo messaggio di errore.
‫Quindi proviamo anche quello.
‫E così in effetti, ci dà lo stesso risultato.
‫Ok, e così hai
‫imparato a specificare i parametri
‫in un URL, in questo modo, ok?
‫Quindi hai imparato a leggere
‫questi parametri dall'URL, usando req dot params.
‫Bene, e poi abbiamo usato quell'ID, quindi quel parametro,
‫per trovare un tour con quell'ID esatto.
‫Quindi è quello che abbiamo fatto qui, in questa linea, ok?
‫Questo era l'obiettivo di
‫questo video, quindi passiamo al prossimo.