‫Istruttore: Un'altra piccola
‫caratteristica che possiamo aggiungere a
‫un'API è fornire un percorso alias a una richiesta
‫che potrebbe essere molto
‫popolare, quindi potrebbe essere richiesta continuamente.
‫E, ad esempio,
‫potremmo voler fornire un percorso specifico
‫per i cinque migliori tour economici.
‫Quindi, se usassimo il nostro percorso normale
‫qui con i filtri e con
‫tutte le
‫funzionalità che abbiamo già, la richiesta sarebbe un po' così.
‫Quindi, sbrighiamoci da tutto questo.
‫Quindi, i cinque tour migliori e più economici.
‫Quindi, questo significa che abbiamo un limite di
‫cinque e poi ordineremo per rating e per prezzo.
‫Quindi, ordina e poi la valutazione
‫media e decrescente, quindi meno la media delle valutazioni.
‫E, nel caso abbiano la stessa media,
‫vogliamo il prezzo più basso possibile.
‫E così, ordineremo anche per prezzo.
‫Diamo subito un'occhiata ai risultati.
‫E, in effetti, abbiamo cinque tour qui.
‫E, Postman fa di nuovo questo scorrimento.
‫Quindi, abbiamo tour con 4. 9, 4.
‫9, 4.
‫9 di nuovo, 4. 8 e 4. 7.
‫E così, questi sono in realtà i nostri cinque tour migliori e più economici.
‫Se dicessimo più economico e migliore,
‫beh, allora forse dovremmo prima ordinare in base al prezzo
‫perché alcuni di loro non sono davvero economici.
‫Ad esempio, questo.
‫Ma abbiamo selezionato, prima, la media.
‫E così, abbiamo ordinato prima per la media più
‫alta e, solo allora in caso di parità, in pratica, solo allora,
‫per il prezzo.
‫Ora, diciamo che questa è una
‫richiesta che viene fatta continuamente e
‫vogliamo fornire un percorso
‫semplice e facile da memorizzare per l'utente.
‫Quindi, andiamo alla nostra app e proviamo a implementarla.
‫E inizieremo dalle loro rotte, quindi tour router.
‫E poi dobbiamo creare un nuovo percorso.
‫E facciamolo qui, proprio in alto.
‫Quindi, router. rotta.
‫E quindi, come chiameremo questo percorso?
‫Bene, diciamo top-5-economici.
‫Quindi, un nome abbastanza semplice, ma funzionerà.
‫E poi, in realtà
‫vogliamo solo ricevere richieste su questa rotta.
‫E quindi, ora è il momento di pensare.
‫Come implementeremo questa funzionalità?
‫Beh, in sostanza, quello che
‫vogliamo è ottenere ancora tutti i tour proprio come qui.
‫E quindi, lasciami andare avanti e iniziare
‫copiando e incollando qui.
‫Quindi, vogliamo ancora usare questa funzione qui perché non
‫ha davvero senso
‫riscrivere tutta la logica che è lì dentro.
‫Ma, prima di poter chiamare questo route ender,
‫fondamentalmente vogliamo precompilare alcuni campi nella stringa
‫di query.
‫Quindi, sappiamo già che
‫la nostra stringa di query dovrebbe essere simile a questa.
‫E, in realtà, possiamo aggiungere altre cose qui.
‫Ma, in sostanza, la nostra
‫stringa di query deve assomigliare a questa.
‫Quindi, la soluzione sarà eseguire un middleware prima
‫di eseguire effettivamente questo gestore getAllTours.
‫E quindi, quella
‫funzione middleware manipolerà l'oggetto query in arrivo.
‫E quindi, questo è un
‫altro esempio molto carino di utilizzo del middleware
‫perché è davvero necessario acquisire familiarità e abituarsi
‫a questo concetto di utilizzo strategico del middleware per
‫modificare l'oggetto della richiesta quando ne abbiamo bisogno.
‫Quindi, aggiungiamolo qui allora.
‫Quindi, tourController.
‫E poi,
‫la funzione middleware che creeremo tra
‫un secondo, che si chiamerà aliasTopTours.
‫Quindi, copiamo quel nome, spostiamoci su tourController e
‫lo metterò qui in cima.
‫Quindi, esportazioni. quindi richiesta, risposta
‫e qual è il terzo argomento di
‫cui abbiamo
‫bisogno nel middleware, ricordi?
‫E so che la sezione Express è già abbastanza
‫lontana a questo punto, ma spero che ricordi che il
‫terzo argomento qui deve essere il prossimo.
‫Quindi, per chiamare il prossimo middleware che
‫si trova nello stack del middleware.
‫Dagli un salvataggio.
‫E così, questo errore dovrebbe scomparire.
‫E quindi, facciamo quello che abbiamo detto che avremmo fatto.
‫Quindi, fondamentalmente per manipolare
‫l'oggetto query in modo che quando
‫raggiunge il gestore getAllTours, sia già diverso.
‫Quindi, prima facciamolo
‫e poi diamo un'occhiata a cosa succede.
‫Quindi, ricorda, il limite sarà impostato a cinque.
‫E ricorda che tutto è stringhe qui e quindi sto
‫impostando anche questo su una stringa.
‫Ora, cos'altro avevamo?
‫Quindi, abbiamo
‫questo tipo, quindi copiamo questo qui e diciamo req. interrogazione. ordinare.
‫Dovrebbe essere questo.
‫E poi, possiamo anche specificare
‫alcuni campi in modo che l'utente non ottenga tutti
‫i campi che abbiamo lì dentro.
‫Quindi, diciamo
‫che vogliamo solo il nome, il prezzo, la
‫media delle valutazioni, il riepilogo e la difficoltà.
‫Dagli un salvataggio
‫e ora tutto ciò di cui abbiamo bisogno è il prossimo, altrimenti questo middleware
‫rimarrà bloccato qui per sempre e non può andare avanti.
‫Quindi, ora cerchiamo di
‫capire un po' meglio cosa accadrà davvero qui.
‫Quindi, non appena qualcuno
‫raggiunge la rotta tra i primi 5 economici, inizieremo.
‫Il primo middleware che verrà eseguito è aliasTopTours.
‫Quindi, la funzione che abbiamo appena creato.
‫Quindi, ciò che farà è
‫impostare queste proprietà dell'oggetto
‫query su questi valori che abbiamo specificato qui.
‫Fondamentalmente precompilare parti dell'oggetto
‫query prima di raggiungere il gestore getAllTours.
‫E così, non appena arriviamo a questa funzione, l'oggetto query
‫è già precompilato, anche se l'utente non
‫ha inserito nessuno di questi parametri
‫nella stringa di query.
‫E quindi, in sostanza, ciò che
‫stiamo facendo
‫qui è precompilare la stringa di query per l'utente in
‫modo che l'utente non debba farlo da solo.
‫E quindi, ora andiamo avanti e proviamo questo.
‫Quindi, sto copiando questo.
‫E qui non ci sono tour.
‫Sono i primi 5 tour.
‫Whoa, cosa sta succedendo qui?
‫Per qualche ragione,
‫non trova questo percorso, quindi torniamo indietro.
‫Quindi, i primi 5 tour.
‫E così, qui nel percorso, ah, ok.
‫Si chiama top-5-economico, quindi il
‫mio errore qui.
‫Quindi, a buon mercato,
‫invialo ora e non è ancora corretto.
‫Ah sì.
‫Certo, devo ancora mettere i tour qui, ovviamente.
‫Quindi, siamo nella risorsa dei tour e l'intero router è
‫montato su questo percorso
‫del tour, ricordalo.
‫E così, è in quei tour, quel tipo
‫di mini applicazione,
‫ricordatelo, che ho creato questo percorso top-5-economico.
‫Quindi, speriamo che ora funzioni.
‫E, in effetti, lo fa.
‫Quindi, ha funzionato, è fantastico.
‫Ora, ovviamente, potremmo fare molte più
‫vie alias qui, ma non è realmente necessario.
‫Volevo solo mostrarti il
‫concetto, mostrarti che può essere una bella
‫funzionalità da aggiungere a qualsiasi API
‫e volevo anche, ancora una volta, mostrarti la potenza dei middleware.
‫Quindi, stiamo parlando di Mongoose qui, ma è
‫comunque molto importante continuare a
‫familiarizzare con i concetti di Express di cui abbiamo parlato prima.
‫Ad ogni modo, ora abbiamo finito con le nostre funzionalità API.
‫Nel prossimo video, faremo il refactoring di
‫tutto questo per rendere l'intero
‫codice un po' più modulare e, ovviamente, migliore.