‫Relatore: Continuiamo a lavorare sulla nostra API.
‫Nei prossimi video, implementeremo
‫un paio di funzionalità API
‫comuni che renderanno un'API più semplice e piacevole
‫da usare per chiunque la utilizzerà.
‫E in
‫questa lezione, inizieremo con il filtraggio.
‫Quindi, ancora una volta, la prima funzionalità che implementeremo è quella
‫di consentire all'utente di filtrare sostanzialmente i dati utilizzando
‫una stringa di query.
‫Lascia che ti dica cosa sta usando Postman per una stringa di query.
‫Quindi, chiudiamo tutti questi ragazzi.
‫Bene.
‫In realtà, dove il filtro avrà senso è qui
‫su questo percorso per ottenere tutti i tour.
‫Perché, questo è quello che,
‫come dice il nome, ottiene tutti i tour.
‫E quindi qui, vogliamo consentire all'utente di filtrare i dati, in
‫modo che invece di ottenere tutti
‫i dati, ottenga solo i dati che corrispondono al filtro.
‫In questo modo, possiamo sostanzialmente consentire all'utente di interrogare
‫i dati in un modo molto semplice.
‫Ancora una volta, usando la stringa di query.
‫E la stringa di query assomiglia un po' a questa.
‫E sono sicuro che l'hai visto.
‫Quindi iniziamo con un punto interrogativo e
‫quindi possiamo semplicemente specificare alcune coppie di valori di campo.
‫Quindi diciamo di
‫voler filtrare per una durata pari a cinque
‫e, allo stesso tempo, una difficoltà facile.
‫Quindi possiamo semplicemente creare una stringa di query come questa.
‫Quindi, di nuovo, inizia con questo
‫punto interrogativo e quindi possiamo
‫specificare tante coppie di valori chiave utilizzando questo formato.
‫E ora la nostra
‫applicazione Postman qui in realtà lo riconosce
‫e sostanzialmente analizza questa stringa qui e mette
‫la chiave e i valori qui in questa scheda Params.
‫Quindi potremmo anche specificare la chiave e i valori qui.
‫Quindi diciamo test, impostalo su ventitre, e quindi vedi qui
‫che lo ha effettivamente
‫aggiunto alla stringa di query.
‫Quindi è un modo molto carino di Postman di aiutarci qui.
‫Perché ora possiamo, ad esempio, mentre stiamo
‫eseguendo i test, possiamo attivarli e disattivarli e puoi vedere
‫che la stringa
‫di query qui reagisce di conseguenza.
‫Ad ogni modo, ora abbiamo bisogno di un modo per accedere a questi dati che
‫si trovano in una stringa di query, nella nostra applicazione Express.
‫Ma, fortunatamente per noi, è
‫molto facile, perché Express se ne occupava già.
‫Quindi questa è solo una delle tante
‫cose che Express fa per noi per rendere davvero lo sviluppo
‫di NodeJS molto più veloce.
‫Quindi lascia che te lo mostri qui, in realtà nella console.
‫Quindi questi dati sono su una richiesta, il che ha senso,
‫e poi sono in un campo chiamato query.
‫Quindi request dot query dovrebbe darci un
‫oggetto ben formattato con i dati della stringa
‫di query.
‫Dagli un salvataggio.
‫E nota, come l'ho effettivamente
‫aggiunto alla funzione di gestione di tutti i tour.
‫Quindi, di nuovo, facciamo questo tipo di filtro nel
‫percorso in cui vogliamo ottenere tutti i tour.
‫Proviamolo ora con questa stringa di query esatta.
‫Inviata la richiesta.
‫E tornando, ecco l'oggetto.
‫In realtà rendiamo questo qui più grande così
‫puoi vedere.
‫Non funziona davvero.
‫Quindi a volte so che alcune persone non riescono
‫a vedere la parte inferiore dello schermo.
‫Lascia che lo faccia di nuovo qui.
‫E così, ci siamo.
‫Abbiamo l'oggetto, che ha la durata impostata su cinque
‫e la difficoltà impostata su facile.
‫E così vedi che Express, molto
‫bene, ha analizzato quella stringa in questo oggetto, facile da usare.
‫Ora una cosa che ho notato qui è
‫che in realtà ci manca il
‫registro che avevamo più facilmente qui nella console.
‫Diamo un'occhiata al motivo per cui sta accadendo.
‫Quindi, per qualche ragione, ora abbiamo l'applicazione prima
‫di leggere effettivamente la variabile d'ambiente.
‫In questo modo, l'applicazione non può accedervi.
‫Pensavo di averlo risolto prima, ma per qualche
‫motivo è tornato ora.
‫Dagli un altro salvataggio qui.
‫E lo proverò di nuovo.
‫Ora riprendiamo la nostra registrazione.
‫Una richiesta di ricezione a questo URL e poi con
‫il resto dei dati qui.
‫Ad ogni modo, ora utilizziamo effettivamente
‫quei dati per implementare il nostro filtro.
‫Ma prima di poterlo fare, devo dirti che in
‫Mongoose ci sono in realtà due modi per
‫scrivere query di database.
‫Il primo consiste nell'utilizzare l'oggetto filtro
‫proprio come abbiamo fatto nella sezione introduttiva di MongoDB.
‫Destra? Ricordati che?
‫Il secondo modo è usare alcuni metodi speciali di Mangusta.
‫Lascia che te lo mostri, molto velocemente.
‫Con l'oggetto filtro, lo faremmo in questo modo.
‫Iniziamo con la ricerca qui, e poi lì dentro
‫possiamo passare un oggetto filtro.
‫E l'ho già detto prima.
‫Ancora una volta, funziona esattamente allo stesso
‫modo di una normale query MongoDB.
‫Potremmo ora dire che la durata lo
‫imposta su cinque.
‫E
‫poi, difficoltà, impostalo su facile.
‫Questa è esattamente la stringa di query che avevamo prima,
‫e ora sto codificandola qui solo
‫per mostrarti i due diversi modi di
‫scrivere le query in Mongoose.
‫Proviamo questo.
‫Vedete che ora, otteniamo solo due risultati.
‫Concediamoci un po' di spazio qui.
‫Bene.
‫Vediamo i due risultati e in effetti
‫entrambi hanno una
‫durata di cinque, quindi qui e qui, ed entrambi sono facili.
‫Facile e facile.
‫Quindi il nostro filtro ha funzionato bene.
‫Questo è il primo modo di scrivere una query.
‫Solo il modo normale a cui siamo già abituati, ma
‫c'è un altro modo.
‫Lascia che te lo mostri anche io.
‫Di nuovo, iniziamo esattamente allo stesso modo,
‫ma poi la differenza è
‫che iniziamo a concatenare un metodo speciale di
‫Mongoose per costruire fondamentalmente la query simile a questa che abbiamo.
‫Quindi diciamo,
‫dove
‫la durata
‫è uguale a cinque.
‫Poi anche, dove la
‫difficoltà, che deve
‫essere tra virgolette, è
‫uguale a
‫facile.
‫Questa query qui sarà esattamente la
‫stessa di questa, ma ancora una volta scritta
‫utilizzando metodi speciali di Mongoose.
‫E ci sono ovviamente tantissimi altri metodi.
‫Ad esempio, invece di uguali, possiamo avere meno di, o uguale,
‫o solo meno di, oppure puoi anche ordinare i
‫risultati o limitare il numero di risultati, e davvero tutti
‫i tipi di cose.
‫Di sicuro, ne useremo alcuni nei
‫prossimi due video.
‫Questo potrebbe sembrare un po' strano qui per
‫te, ma in realtà è molto, molto utile in alcuni casi.
‫Solo per testare, prova di nuovo con questo.
‫E infatti otteniamo i nostri stessi due risultati.
‫Ora, lasciatemi commentare questo qui fuori.
‫Lo lascerò qui solo come
‫riferimento, perché in questo momento useremo questo metodo qui.
‫E lo useremo, perché in
‫realtà abbiamo già un oggetto che assomiglia
‫molto a questo.
‫E questa è richiesta dot query.
‫Se lo confronti, questo oggetto,
‫con questo oggetto che vedi quaggiù,
‫sembra esattamente uguale a questo.
‫Per implementare un filtro molto
‫semplice, tutto ciò che dobbiamo fare in questo caso è dire, req dot query.
‫Proviamolo ancora una volta.
‫Sbarazzati di questo qui.
‫E infatti otteniamo esattamente gli stessi due risultati.
‫Ora proviamo solo con la difficoltà impostata su facile.
‫Ora otteniamo quattro risultati.
‫Tutti ovviamente avranno
‫la difficoltà impostata su facile.
‫Il nostro filtro, il nostro filtro di
‫base, ora funziona davvero.
‫Ora, il problema con questa
‫implementazione è che in realtà è troppo semplice.
‫Questo perché, in seguito, avremo
‫altri parametri di query.
‫Ad esempio, sort, per la funzionalità di ordinamento,
‫o page, per l'impaginazione.
‫Dobbiamo assicurarci che
‫non stiamo interrogando per questi nel nostro database.
‫Ad esempio, se
‫aggiungessimo qui, page, uguale a
‫due, ovviamente non otterremmo alcun risultato.
‫Lascia che te lo mostri.
‫E in effetti non otteniamo alcun
‫risultato, perché non c'è nessun documento in questa
‫raccolta in cui page è impostato su due.
‫Vogliamo solo usare questo parametro qui, o
‫questo campo, page, per implementare l'impaginazione e non
‫per interrogare effettivamente il database.
‫Quindi quello che dovremo
‫fare è escludere sostanzialmente questi nomi di campi speciali dalla
‫nostra stringa di query prima di eseguire effettivamente il filtraggio.
‫Ora andiamo avanti e implementiamolo.
‫Quello che faremo è, per
‫prima cosa, creare una copia superficiale dell'oggetto query request dot.
‫Chiamiamolo oggetto query.
‫Qui abbiamo bisogno, davvero, di una copia cartacea.
‫Non possiamo semplicemente fare, request dot query, perché
‫quindi, se elimini
‫qualcosa da questo oggetto, lo
‫elimineremmo anche dall'oggetto query dot req.
‫E questo perché
‫in JavaScript, quando impostiamo una variabile su un altro
‫oggetto, quella nuova variabile sarà fondamentalmente
‫solo un riferimento a quell'oggetto originale.
‫Quindi abbiamo davvero bisogno di una copia cartacea qui.
‫In JavaScript, non c'è davvero un modo
‫integrato per farlo, ma un trucco molto
‫carino che possiamo usare, poiché ES6, è usare, prima, la struttura che
‫usiamo usando punto punto punto.
‫E poi possiamo semplicemente creare un nuovo
‫oggetto da quello.
‫Proprio come questo.
‫Questa strutturazione qui, questi
‫tre punti, fondamentalmente rimuoverà tutti i campi dall'oggetto.
‫Qui con le parentesi graffe,
‫beh, creiamo semplicemente un nuovo oggetto.
‫Quindi abbiamo un nuovo oggetto
‫che fondamentalmente conterrà tutte le coppie di
‫valori chiave che erano nel nostro oggetto query req dot.
‫Quindi questa è una copia.
‫Ora creiamo un array di
‫tutti i campi che vogliamo escludere.
‫Lo chiamo campi esclusi.
‫E poi vogliamo escludere la pagina, quindi è quella
‫che ti ho
‫appena detto prima in Postman.
‫Quindi, vogliamo anche escludere
‫l'ordinamento, vogliamo
‫escludere il limite
‫e vogliamo escludere i campi.
‫Implementeremo tutte le funzionalità di paging,
‫ordinamento, limitazione e selezione solo di alcuni
‫campi specifici, più avanti nei prossimi
‫due video.
‫Successivamente, ciò che dobbiamo fare
‫è rimuovere sostanzialmente tutti questi campi dal
‫nostro oggetto query.
‫E per farlo,
‫faremo un giro su questi campi.
‫Quindi, campi
‫esclusi per ciascuno.
‫E stiamo usando per
‫ciascuno perché non vogliamo salvare un nuovo array.
‫Quindi ognuno di questi
‫elementi, possiamo usare l'operatore di cancellazione.
‫E poi
‫dall'oggetto query, vogliamo eliminare il
‫campo con il nome
‫dell'elemento, quindi l'elemento corrente nell'array.
‫In questo modo, elimineremo prima il campo della pagina,
‫quindi l'ordinamento, quindi il limite, quindi i campi.
‫Naturalmente, solo nel caso in cui sia presente.
‫Se, ad esempio, non è presente alcun
‫campo limite, ovviamente questo non verrà eliminato, perché non
‫è presente.
‫Diamo ora un'occhiata se funziona davvero.
‫Registrerò la query dot req
‫e allo stesso tempo il nostro oggetto query.
‫Dare a questo un salvataggio.
‫Non preoccuparti per i nostri risultati ora.
‫Tutto ciò a cui voglio dare
‫un'occhiata è il nostro oggetto query, solo per assicurarmi
‫che questa logica che abbiamo qui funzioni effettivamente.
‫Aggiungiamo qui una sorta di uno e un limite di 10.
‫Questi avranno più senso in seguito.
‫Per ora, li sto solo
‫aggiungendo, in modo da poterli successivamente escludere.
‫I risultati non contano, tutto ciò che conta
‫è che la nostra query originale sia questa qui, e quindi
‫il nostro oggetto query, che è
‫quello che
‫useremo, ha solo difficoltà impostata su facile.
‫Questo perché abbiamo escluso, pagina, ordinamento e limite.
‫Ora funziona, quindi invece di usare
‫la query dot req, useremo il nostro oggetto query.
‫Eliminiamolo e riproviamo.
‫Ora dovremmo tornare a
‫interrogare tutti i documenti che hanno
‫una difficoltà impostata su facile e ignorare tutti questi altri campi.
‫Invia quello.
‫E infatti, siamo tornati
‫ai nostri quattro risultati che avevamo prima.
‫Possiamo anche attivare la durata, e infatti
‫ora avremo due risultati.
‫Ricordati che?
‫E se li spegniamo,
‫beh, allora ovviamente funzionerà allo stesso modo.
‫Cancelliamo semplicemente questa riga vuota qui.
‫E così, in effetti, con la nostra stringa di query originale, le
‫cose ovviamente funzionavano ancora allo stesso modo.
‫Abbiamo preparato la nostra funzione di filtro in
‫modo che ignori i campi pagina, ordinamento e limite.
‫Ma in realtà c'è
‫qualcos'altro che dobbiamo fare nel nostro
‫codice, per poter implementare queste funzionalità nei video futuri.
‫Torniamo qui al nostro codice.
‫Quindi ora impariamo un
‫po' come funzionano effettivamente le query in Mongoose.
‫Penso di averlo
‫menzionato prima, ma è molto importante parlarne di nuovo.
‫Questo metodo di ricerca qui restituirà una query.
‫Tutto questo qui restituirà una query.
‫E questo è il motivo
‫per cui possiamo concatenare altri metodi come questo.
‫Come dove, uguali e tutti questi altri metodi di
‫cui ti ho parlato prima.
‫Lascia che te lo mostri di nuovo nella documentazione.
‫Qui abbiamo l'oggetto query e,
‫ancora una volta, quando usiamo il
‫metodo find, restituirà un oggetto che è una query.
‫Quindi in query dot
‫prototipo, abbiamo quindi tutti questi metodi.
‫Ad esempio, qui sotto abbiamo dove, che
‫ho appena menzionato.
‫Abbiamo l'ordinamento che è
‫quello che useremo in seguito per l'ordinamento.
‫Abbiamo, vediamo, abbiamo minore
‫o minore di uguale, abbiamo maggiore.
‫Abbiamo...
‫Cos'altro abbiamo usato?
‫Abbiamo usato uguali.
‫Tutti questi fanno parte del prototipo del punto di query.
‫Che, ancora una volta, si riferisce agli
‫oggetti che stiamo creando usando la classe query.
‫Di nuovo, questo è il
‫motivo per cui possiamo fare questo tipo di concatenamento.
‫Ora viene la parte importante.
‫Non appena attendiamo effettivamente
‫il risultato della query, non appena
‫utilizziamo wait qui o qui, ad esempio.
‫Non appena usiamo questo wait,
‫la query verrà eseguita e
‫tornerà con i
‫documenti che corrispondono effettivamente alla nostra query.
‫Se lo facciamo in questo modo, come abbiamo fatto
‫qui, ora c'è un modo
‫per implementare, in seguito, l'ordinamento, l'impaginazione o
‫tutte queste altre funzionalità.
‫Invece, quello che dovremo
‫fare è salvare questa parte qui in una query, quindi
‫alla fine, non appena cambiamo tutti i metodi nella
‫query di cui abbiamo bisogno, solo
‫allora alla fine, possiamo aspettare che interrogazione.
‫Ad esempio, utilizzeremo il metodo sort.
‫Useremo il metodo
‫predict, useremo il metodo limit e
‫useremo, davvero, un mucchio di metodi
‫e li concateneremo a questa query.
‫Sarebbe impossibile farlo,
‫di nuovo, se aspettiamo il risultato di
‫questa query iniziale qui, subito.
‫Spero che abbia avuto senso.
‫Il modo in cui lo
‫faremo è
‫che faremo i nostri tour quaggiù.
‫E questo attenderà la domanda.
‫La query è, beh, semplicemente la
‫query senza attendere.
‫Giusto per renderlo coerente con questa
‫parte qui,
‫facciamolo in questo modo.
‫Diciamo che,
‫prima, costruiamo la
‫query e poi eseguiamo la query.
‫Non è corretto.
‫Dato che qui stiamo facendo
‫commenti, diciamo anche
‫di inviare una risposta.
‫Giusto per rendere il nostro codice un po' più facile da scansionare.
‫Spero che tutto
‫questo abbia avuto un senso, questo si
‫è rivelato un video piuttosto
‫lungo, ma era importante finire questa parte qui
‫spiegandovi questa logica qui, in modo che
‫nei prossimi video saremo quindi in grado
‫di implementare il resto delle caratteristiche.
‫Perché, ancora una volta,
‫senza averlo così, non funzionerebbe.