‫Istruttore: Finora in
‫questa sezione abbiamo parlato dei
‫modelli Mongoose, delle operazioni CRUD
‫con Mongoose, abbiamo fatto molte query e
‫abbiamo appreso della pipeline di aggregazione, ma ora
‫per i prossimi due video, torniamo
‫ai nostri dati modella e impara alcune funzioni super utili
‫che Mongoose ci offre per modellare i nostri dati.
‫E il primo di cui parleremo
‫sono le proprietà virtuali.
‫E quindi apriamo qui il nostro modello di tour.
‫Bene, ora le proprietà virtuali sono fondamentalmente campi che possiamo
‫definire sul nostro schema
‫ma che non verranno mantenuti.
‫Quindi non verranno salvati nel database
‫per risparmiare spazio lì.
‫E la maggior parte
‫delle volte, ovviamente, vogliamo davvero salvare i nostri dati
‫nel database, ma le proprietà virtuali hanno
‫molto senso per i campi che possono essere derivati l'uno dall'altro.
‫Ad esempio una conversione da miglia a chilometri,
‫non ha senso memorizzare questi
‫due campi in un database se
‫possiamo facilmente convertirne uno nell'altro, giusto?
‫Ok, ora definiamo una proprietà virtuale che contenga la
‫durata del tour in settimane.
‫E quindi questo è fondamentalmente
‫un campo che possiamo convertire molto facilmente dalla
‫durata che abbiamo già in giorni, giusto?
‫E quindi ecco come funziona.
‫Definiamo quelle proprietà virtuali sullo schema del
‫tour e quindi diciamo tourSchema. virtual e poi il nome della
‫proprietà virtuale.
‫Quindi chiamiamola durata settimane, e
‫poi lì dobbiamo definire il metodo get.
‫Ed è solo perché questa proprietà virtuale
‫qui verrà praticamente creata
‫ogni volta che estraiamo dei dati dal database.
‫E quindi questa funzione get qui è chiamata getter.
‫Ora qui passiamo una funzione, e in
‫realtà questa funzione
‫di richiamata sarà una funzione reale, quindi non una funzione
‫freccia, e ti spiegherò perché in un secondo.
‫Ora come definiamo sostanzialmente
‫la proprietà virtuale?
‫Beh, è molto semplice, tutto quello che dobbiamo
‫dire è che vogliamo restituire questo, . durata in questo caso, divisa
‫per sette.
‫Ecco come calcoliamo la durata in settimane, quindi la durata
‫in giorni divisa per sette perché ci sono
‫sette giorni nella settimana, e quindi questa
‫è la durata in settimane.
‫Ad esempio, se un tour ha sette
‫giorni, sarà ovviamente una settimana.
‫Ora ho usato questa funzione normale qui perché
‫ricorda, una funzione freccia non ottiene la propria
‫parola chiave del disco.
‫Qui abbiamo effettivamente bisogno della parola chiave
‫disk perché la parola chiave
‫disk in questo caso punterà al documento corrente.
‫E quindi di solito quando
‫vogliamo usarlo, dovremmo sempre usare una funzione normale.
‫Quindi, ovunque a Mongoose, userò
‫sempre queste funzioni regolari a cui
‫siamo abituati.
‫Quindi salvalo qui, ed è proprio così.
‫È così che definiamo le
‫settimane di durata, che non verranno mantenute nel
‫database, ma saranno presenti solo non appena avremo i dati.
‫In questo momento in realtà non
‫sarà ancora lì, perché qui manca un
‫pezzo, quindi lasciatemi iniziare mostrandovelo.
‫Quindi, se proviamo a ottenere tutti i tour,
‫vedrai che le settimane di durata non si trovano
‫da nessuna parte qui.
‫E questo perché abbiamo bisogno di definire esplicitamente
‫nel nostro schema che vogliamo le proprietà virtuali nel
‫nostro output.
‫E quindi ricorda come l'ho detto a questa Mangusta. schema, possiamo passare non solo
‫l'oggetto con la definizione
‫dello schema stesso, ma anche
‫un oggetto per le opzioni dello schema.
‫E quindi aggiungiamolo qui alla fine,
‫quindi questo primo oggetto qui è la definizione dello schema e
‫ora il secondo oggetto per le opzioni.
‫E ciò che dobbiamo specificare qui sono le due proprietà
‫JSON qui, e ciò che diciamo è che
‫ogni volta che i dati vengono effettivamente emessi come JSON, vogliamo
‫che i virtual siano veri.
‫Quindi fondamentalmente i virtuali fanno parte dell'output.
‫E ora sto duplicando questo perché
‫vogliamo anche dire di obiettare.
‫Quindi, in pratica, quando i dati vengono
‫emessi come oggetto.
‫Quindi, se ora torniamo qui, dovremmo essere in grado
‫di vedere le settimane di durata.
‫Aspettiamolo, e infatti, eccolo qui.
‫Quindi sono cinque giorni e quindi è 0. 71 settimane.
‫Qui abbiamo sette giorni, quindi è una settimana.
‫Ok, quindi funziona davvero, fantastico.
‫Ora una cosa che
‫dobbiamo tenere a mente è che non possiamo usare
‫questa proprietà virtuale qui in una query, perché
‫tecnicamente non fanno parte del database.
‫Quindi non
‫possiamo dire, ad esempio, tour. trova dove la durata delle settimane è uguale a uno.
‫Non funzionerà, di nuovo perché questa proprietà
‫non fa parte del database.
‫Ora, ovviamente, avremmo anche potuto eseguire questa conversione
‫ogni volta che abbiamo interrogato i dati, ad esempio,
‫come in un controller, ma
‫non sarebbe la migliore pratica semplicemente perché vogliamo cercare
‫di mantenere la logica aziendale e la
‫logica dell'applicazione il più separate possibile possibile, ricordi?
‫Quindi c'era tutto quel discorso sui modelli grassi
‫e sui controller sottili di cui abbiamo parlato prima, che dice
‫che dovremmo avere modelli
‫con quanta più logica di business possiamo scaricare su di
‫loro e controller sottili con
‫la minima logica di business possibile.
‫E quindi proprietà virtuali come questa sono in realtà un
‫buon esempio di come possiamo ottenere
‫quel tipo di architettura.
‫Quindi conoscere la durata in settimane
‫è una logica aziendale perché ha a che
‫fare con l'attività stessa, non con cose come richieste
‫o risposte, quindi facciamo il calcolo proprio nel
‫modello a cui appartiene e
‫non nel controller.