‫Istruttore: Va bene, in
‫questa lezione parleremo di qualcosa
‫chiamato percorsi nidificati, cosa sono, perché
‫ne abbiamo bisogno
‫e come possiamo effettivamente implementarli in Express.
‫Pensiamo per un secondo a
‫come in pratica vogliamo creare una nuova recensione.
‫Fino a questo punto, durante la creazione di
‫nuove recensioni, abbiamo sempre passato manualmente
‫l'ID tour e l'ID utente nel corpo della
‫richiesta, quindi abbiamo creato la recensione da lì, a destra.
‫Va bene durante lo sviluppo, ma ovviamente non è
‫così che verrà creata una
‫recensione nel mondo reale.
‫Quindi, nel mondo reale, l'ID utente
‫dovrebbe idealmente provenire dall'utente attualmente connesso e
‫un ID tour dovrebbe provenire dal tour corrente.
‫Questo dovrebbe idealmente essere
‫codificato direttamente nel percorso, quindi nell'URL.
‫Quando invii una richiesta di post per
‫una nuova recensione, vorremmo inviarla a un URL come questo.
‫Scriviamolo qui solo come commento.
‫Idealmente, vorremmo fare una richiesta
‫per il post, per il tour e l'ID del tour,
‫non importa qui, e poi le recensioni.
‫Ok, ora, proprio come questo,
‫abbiamo l'ID tour direttamente nell'URL
‫e l'ID utente verrà anche
‫dall'utente attualmente connesso.
‫Quello che vediamo qui è ora un cosiddetto percorso annidato.
‫Hanno molto senso quando
‫c'è una chiara relazione genitore-figlio tra le risorse.
‫Questo è chiaramente il caso qui, giusto.
‫Le recensioni sono chiaramente figlie del tour.
‫Questo percorso nidificato
‫significa fondamentalmente accedere alla risorsa
‫delle recensioni sulla risorsa del tour, va bene.
‫Allo stesso modo, vorremmo anche accedere
‫alle recensioni di un determinato tour allo stesso modo.
‫Diciamo quindi una richiesta get, e di
‫nuovo per tour slash tour ID e slash recensioni.
‫Questo ci farebbe quindi idealmente
‫ottenere tutte le recensioni per questo tour.
‫Potremmo andare anche oltre
‫e specificare anche l'ID della recensione.
‫Quindi di nuovo, solo una stringa casuale qui,
‫ma hai capito.
‫In questo caso, otterremmo una revisione
‫con l'ID di questo
‫qui durante il tour con questo ID.
‫Ecco a cosa servono i percorsi nidificati.
‫Questo è un modo molto più semplice di
‫leggere e comprendere come funziona l'API per i nostri utenti API.
‫È molto più facile quindi scherzare con
‫le stringhe di query e tutte quelle cose del genere.
‫Inoltre, mostra davvero come ci
‫sia questa chiara relazione tra queste risorse,
‫ancora una volta, recensioni e tour.
‫Va bene, ma basta parlare.
‫Ora implementiamolo effettivamente a partire
‫dal percorso post.
‫Ora, poiché il percorso inizia effettivamente con i tour, verrà
‫ovviamente reindirizzato al nostro router del tour.
‫Almeno per ora, dovremo implementare questa funzionalità nel tour
‫router, anche se sembra un po'
‫controintuitivo dato che in realtà abbiamo a
‫che fare con le recensioni.
‫Ma ancora una volta, per ora, implementiamolo in questo modo.
‫Veniamo al nostro router utente e per prima
‫cosa, poiché utilizzeremo le
‫recensioni qui,
‫dobbiamo importare il controller di revisione.
‫Il controller richiede.
‫Forse avrei dovuto semplicemente copiare la riga di prima.
‫Controller e controller di revisione.
‫Bene, ora qui in fondo, e prendiamo il
‫nostro codice per questo
‫esempio da qui solo come
‫riferimento.
‫In modo che ora possiamo effettivamente implementarlo.
‫Il percorso che implementeremo qui
‫è slash ID e quindi recensioni.
‫Questa parte del tour qui, come già
‫sai, è dove abbiamo
‫montato questo router e quindi non dobbiamo ripeterlo qui.
‫Ma poi, abbiamo l'ID del tour e poi le recensioni tagliate.
‫Per renderlo davvero chiaro, chiamiamolo
‫effettivamente ID tour poiché ora abbiamo
‫a che fare
‫con diverse risorse qui.
‫Quindi è un po' più chiaro chiamarlo davvero per quello che è.
‫Ora vogliamo implementare la revisione della creazione.
‫Protezione dal punto del controller di autenticazione.
‫Vogliamo anche limitare l'accesso solo agli utenti
‫e quindi, naturalmente, il nostro controller di revisione non crea
‫una recensione, va bene.
‫Ancora una volta, è un po' strano e
‫controintuitivo chiamare effettivamente il controller di revisione
‫qui nel percorso dell'utente.
‫Beh, in realtà, non dovrebbe essere nel percorso dell'utente.
‫Per qualche ragione, ho aperto
‫i percorsi utente e non i percorsi tour, quindi mi dispiace per quello.
‫Tagliamo tutto da qui, veniamo ai nostri percorsi turistici, e in
‫realtà facciamolo qui in fondo.
‫Ovviamente dobbiamo anche procurarci il controller di revisione.
‫Quindi ora dovremmo essere a posto.
‫Quello era uno stupido bug.
‫Ma comunque, quello che stavo dicendo
‫è che non ha molto senso chiamare effettivamente
‫il controller di revisione nel percorso del tour, ma ancora
‫una volta, per ora, dobbiamo farlo in questo
‫modo perché il percorso inizia con il tour.
‫È questo router che verrà attivato.
‫Nel prossimo video lo risolveremo,
‫ma per ora vogliamo solo
‫farlo funzionare e
‫acquisire familiarità con l'intero concetto di percorsi nidificati.
‫Ad ogni modo, ora abbiamo il nostro ID tour proprio nel
‫percorso, ma ovviamente
‫dobbiamo far sapere al controller che ora dovrebbe utilizzare questo
‫ID tour e anche l'ID dell'utente attualmente connesso.
‫Ora dobbiamo andare
‫avanti e aggiornare il nostro controller di
‫revisione proprio qui a creare recensione.
‫Quello che faremo è questo.
‫Diremo, se non c'è richiesta dot body dot tour, quindi
‫in pratica se non abbiamo specificato l'ID
‫del tour e il
‫corpo, allora vogliamo definirlo come quello
‫proveniente dall'URL.
‫Req dot body dot tour è uguale a
‫request, e ora ricorda come
‫quel parametro URL è su request dot params e poi,
‫naturalmente, il nome del parametro stesso, quindi tour ID.
‫Questa è la prima parte e
‫la seconda, dobbiamo fare lo stesso anche con l'utente.
‫Se non c'è una richiesta
‫utente punto, o in realtà, richiesta punto corpo punto
‫utente, allora la richiesta punto corpo
‫punto utente dovrebbe essere richiesta punto utente punto ID.
‫E ancora, riceviamo la richiesta dell'utente
‫punto dal middleware di protezione, ed è proprio così.
‫Mettiamo solo un commento qui, percorsi nidificati.
‫Con questo, facciamo in
‫modo che l'utente possa ancora specificare manualmente
‫il tour e l'ID utente.
‫Quello che stiamo
‫facendo qui è semplicemente definirli quando non sono
‫presenti o quando non sono specificati nel corpo della richiesta.
‫Questo dovrebbe essere sufficiente per testarlo ora.
‫Va bene, diamo un'occhiata agli
‫utenti che abbiamo ottenuto a questo punto.
‫Abbiamo questi due utenti
‫regolari, abbiamo l'utente di prova e abbiamo Jonas
‫qui, ma abbiamo dimenticato la sua password.
‫Andiamo avanti, eliminiamo questo
‫utente e creiamone uno nuovo.
‫Va bene, quindi in Compass, gli utenti, ed
‫è questo.
‫Ricreiamo sostanzialmente questo utente.
‫Tutto ciò di cui abbiamo veramente bisogno sono questi due dati.
‫In realtà questo è iscriversi.
‫Lo stesso nome, la
‫stessa email e anche la stessa password.
‫A questo punto, abbiamo già effettuato l'accesso
‫come questo utente, il cosiddetto Jonas, teniamolo a mente.
‫Successivamente, dobbiamo scegliere su quale tour
‫vogliamo effettivamente creare la recensione.
‫Facciamolo di nuovo qui a The Forest
‫Hiker in modo da ottenere più recensioni sullo stesso tour.
‫Quello che andremo
‫a fare ora è fondamentalmente accedere a quel percorso annidato
‫che abbiamo appena creato.
‫Abbiamo i tour.
‫Ora dobbiamo ottenere l'ID del tour
‫e, ancora, useremo questo
‫per The
‫Forest Hiker, quindi tagliamo le recensioni e poi
‫ricorderemo un post.
‫Poi bisogna specificare anche l'autorizzazione, quindi
‫bearer token, e poi ora nel corpo, non ci
‫resta che specificare
‫il rating e la recensione.
‫Il punteggio è
‫cinque e poi del testo qui.
‫Quindi questo dovrebbe essere già sufficiente per provarlo.
‫Mandiamolo.
‫Ora non abbiamo il permesso di
‫eseguire questa azione, per qualche motivo, quindi è strano.
‫Ci siamo registrati come questo Jonas, e in
‫realtà è solo un utente normale
‫come dovrebbe essere.
‫Diamo un'occhiata al nostro router.
‫Qui, oh ok, è l'utente, non gli utenti.
‫Un piccolo bug come quello può, come vedi,
‫mandare in crash l'intero percorso, quindi proviamo di nuovo ora.
‫E ora otteniamo effettivamente la revisione
‫finale con il tour e l'utente definiti correttamente.
‫Almeno lo spero.
‫L'ID del tour, vedi, finisce qui nel 951, e quindi
‫è esattamente lo stesso qui.
‫L'utente è questo 1f3 e quindi, in effetti, è
‫esattamente lo stesso.
‫Va bene, e quindi ora dovremmo essere
‫effettivamente in grado di confermarlo, e quindi questo
‫tour qui in realtà è già quello su cui
‫stavamo creando la nuova recensione.
‫Diamo un'occhiata, e in effetti ora
‫abbiamo due recensioni.
‫Questo è quello che abbiamo appena creato.
‫È nel tour corretto e,
‫naturalmente, anche nell'utente corretto con il nome di Jonas.
‫Fantastico, è davvero fantastico.
‫Andiamo avanti e salviamo questo.
‫Creerò di nuovo una nuova cartella qui.
‫Lo chiamerò tour slash recensioni.
‫Ora qui, creiamo,
‫creiamo una nuova recensione in tour.
‫Dovrebbe essere davvero fuori e proprio così.
‫In realtà mettiamolo qui.
‫Non funziona davvero come dovrebbe per qualche motivo.
‫E qui andiamo.
‫Va bene, ha funzionato bene,
‫ma come ho detto prima, l'implementazione è
‫un po' confusa a questo punto.
‫E ancora, questo perché abbiamo definito tecnicamente un percorso
‫di revisione nel router del tour.
‫È un po' confuso, quindi nel prossimo
‫video lo sistemeremo.