‫Docente: Quindi hai
‫già imparato a creare nuovi documenti nel database.
‫Ma in questa lezione ti
‫mostrerò un modo più semplice e persino migliore per farlo,
‫mentre implementiamo il nostro gestore di tour di creazione.
‫Quindi a questo punto la
‫nostra API praticamente non fa più nulla.
‫Non funziona più
‫perché in pratica abbiamo eliminato tutte le
‫funzionalità che avevamo nell'ultimo video.
‫E lo abbiamo fatto, in modo che
‫nelle prossime due lezioni possiamo ricostruirlo usando un vero database.
‫Ok, quindi in pratica finalmente costruiamo la nostra vera API.
‫E inizieremo implementando la
‫funzione createTour.
‫Ma ricorda solo la funzione handler
‫che viene chiamata non appena c'è una richiesta di
‫posta al percorso del tour.
‫Quindi questo è quello che abbiamo qui in tourRoutes.
‫Quindi mettiamolo qui.
‫Quindi quello che ho appena detto è questo.
‫Quindi abbiamo questo checkBody qui.
‫Che in realtà è
‫qualcosa che saremo anche in grado di eliminare.
‫Allora dov'è, in realtà?
‫checkBody va bene,
‫quindi questa è un'altra di queste funzioni di cui non
‫abbiamo davvero più bisogno.
‫Perché questo era fondamentalmente per convalidare il corpo.
‫Quindi, per vedere se conteneva il nome o la proprietà del prezzo.
‫Destra?
‫Ma ora se ne
‫occuperà la nostra modella mangusta.
‫E così di nuovo, questo
‫qui è stato carino per mostrarci effettivamente come funziona
‫il middleware, ma ora possiamo liberarcene.
‫Ok, quindi lo eliminerò anche da qui.
‫Dagli un nuovo salvataggio.
‫Ed ora è tornato a funzionare.
‫Comunque la funzione che stiamo
‫creando ora è questa funzione createTour.
‫Dove solo un dato verrà
‫chiamato non appena qualcuno raggiunge il percorso del tour con una richiesta di posta.
‫Ok, quindi solo per ricapitolare perché
‫so che può essere un
‫po' confuso con questi diversi file e diverse
‫cartelle e diverse funzioni.
‫Ma è anche molto
‫importante iniziare a organizzare il nostro
‫codice fin dall'inizio.
‫Bene?
‫Comunque, siamo qui nella funzione createTour.
‫E quindi ora creiamo effettivamente un nuovo tour.
‫E lo faremo in base ai
‫dati che arrivano dal corpo.
‫Ricordati che?
‫Ora ricorda come creavamo documenti un paio
‫di lezioni fa.
‫Quindi abbiamo fatto così.
‫Ad esempio, diciamo newTour quindi
‫uguale a newTour
‫e quindi i dati lì dentro.
‫Quindi abbiamo fatto così e poi questo è un nuovo tour.
‫E poi digitiamo newTour. salva e
‫funziona abbastanza bene.
‫Ma possiamo farlo in un modo ancora più semplice.
‫Quindi, invece di fare questo, possiamo
‫fare Tour. creare e quindi incollare i dati lì.
‫Va bene e farà la stessa identica cosa.
‫La differenza principale è che in questa
‫versione qui chiamiamo sostanzialmente il metodo direttamente sul tour
‫mentre in questa prima versione abbiamo chiamato il
‫metodo sul nuovo documento.
‫Ok, quindi è completamente diverso.
‫Quindi di nuovo abbiamo avuto il tour che abbiamo
‫creato dal modello.
‫E poi in quel tour abbiamo usato il metodo di salvataggio.
‫Perché il documento ha accesso a questo metodo
‫e anche a molti altri metodi.
‫Ma qui nella seconda
‫situazione chiamiamo questo metodo di creazione proprio sul modello stesso, ok?
‫Ora ricorda come questo metodo di salvataggio ha restituito una promessa.
‫E quindi anche questo creare qui restituisce una promessa.
‫E quindi per accedere al documento file così
‫come è stato creato
‫nel database, avremmo quindi usato . allora va bene?
‫Ma invece di usare promesse come questa,
‫inizierò a usare async wait.
‫Bene.
‫Quindi questa funzione qui dovrebbe essere una funzione asincrona.
‫Quindi tutto ciò che
‫dobbiamo fare è scrivere asincrono proprio qui.
‫Quindi abbiamo asincrono e quindi ora possiamo aspettare il risultato di
‫questa promessa qui.
‫Quindi spero che tu abbia familiarità con questo.
‫E in realtà ho una sezione
‫in questo corso che tratta esattamente questo genere di cose.
‫Quindi, se non hai
‫guardato quella sezione ma non hai ancora familiarità al 100% con
‫async wait, vai avanti e guarda quella sezione
‫in modo da capire davvero cosa sta succedendo qui.
‫Ok, quindi invece di usare questo, qui userò async
‫wait e quindi salverò il
‫valore del risultato di questa promessa nella
‫nuova variabile tour.
‫Ok, ora l'ultimo pezzo del puzzle qui
‫è ovviamente quello di passare alcuni dati reali in questo metodo di creazione.
‫E quindi, invece di
‫questo oggetto vuoto, passeremo il corpo della
‫richiesta, quindi req. body e quindi questi sono
‫i dati forniti con la richiesta di post, giusto?
‫Ora solo un'altra
‫volta, solo per assicurarti che tutto ti sia chiaro.
‫Ok, quindi possiamo usare direttamente il modello del tour e chiamare
‫il metodo di creazione su di esso.
‫Quindi in quella funzione passiamo i
‫dati che vogliamo memorizzare nel database come un nuovo tour.
‫E quei dati provengono dal corpo della posta, giusto?
‫E quindi è memorizzato all'interno del corpo del punto della richiesta.
‫Quindi questa variabile qui.
‫Ora questo metodo qui restituirà quindi una promessa.
‫E aspettiamo quella promessa usando
‫async wait e poi memorizziamo quel risultato nella
‫variabile newTour che sarà
‫il documento appena creato già con l'ID e tutto, ok?
‫Quindi terrò questo
‫codice qui solo come riferimento.
‫E per ora riportiamo qui questo dato.
‫Pezzo di codice in realtà.
‫Dagli un salvataggio.
‫E ora otteniamo questo errore di lint ES.
‫Quindi diamo un'occhiata a
‫quello appena messo il mouse qui.
‫E ci dice che le funzioni asincrone non sono supportate fino
‫a questo nodo 7. 6 e quindi questo errore
‫di lint ES proviene da quel plug-in del nodo che
‫abbiamo effettivamente installato.
‫Quindi puoi vederlo qui.
‫Bene, quindi quello che faremo per risolvere questo problema è
‫semplicemente andare al pacchetto. json e qui
‫trovi la versione del nodo
‫che stiamo effettivamente utilizzando.
‫Quindi è molto semplice.
‫Abbiamo solo bisogno di specificare la proprietà dei
‫motori qui nel nostro documento json.
‫E imposta il nodo su maggiore o
‫uguale a 10.
‫Ok, e questo perché in
‫questo corso usiamo almeno il nodo dieci.
‫Quindi 7. 6 sarebbe sufficiente per far scomparire quell'errore
‫ma ovviamente specifichiamo la versione reale che
‫stiamo effettivamente utilizzando.
‫Quindi diamo a questo un salvataggio.
‫Chiudilo.
‫E così ora il nostro errore qui è effettivamente sparito.
‫Ora solo un altro passaggio prima di poterlo effettivamente
‫provare nella nostra app Postman.
‫Ed è che in realtà abbiamo bisogno di gestire gli errori.
‫Ok, quindi tieni presente che con async
‫wait dobbiamo testare gli errori usando la sintassi try catch.
‫Quindi scriviamo un blocco try.
‫Quindi avvolgi tutto il nostro codice lì dentro.
‫E poi finalmente un blocco di cattura.
‫Che come già sappiamo ha accesso all'oggetto errore.
‫E ora cosa mettiamo effettivamente qui?
‫Bene, dobbiamo pensare
‫a quando esattamente può verificarsi un errore.
‫Quindi ricorda come due lezioni fa
‫quando stavamo creando i nostri primi documenti.
‫Abbiamo ricevuto un
‫errore quando abbiamo provato a creare
‫un documento senza uno dei campi richiesti, giusto?
‫E quindi quello era un errore di convalida.
‫Ed è uno degli errori che verrebbero catturati qui.
‫Va bene perché se provassimo a creare un
‫documento diciamo senza uno dei campi
‫obbligatori allora questa promessa
‫che viene creata qui verrebbe respinta, ok?
‫E quindi se abbiamo una promessa
‫rifiutata qui, allora entrerà nel blocco catch.
‫E quindi, fondamentalmente in questo blocco catch qui
‫vogliamo inviare una risposta
‫dicendo che c'è stato un errore.
‫Va bene così res. stato di nuovo qui e
‫400 che sta per cattiva richiesta. json e ora qualcosa di molto simile
‫a questo,
‫ma il suo stato è fail
‫e quindi invece dei dati qui inviamo un
‫messaggio e per ora consente di impostare il messaggio sull'errore.
‫Bene.
‫E
‫ora torniamo finalmente alla nostra applicazione Postman e proviamoci.
‫Ok, quindi crea questo e ora
‫creiamo un nuovo tour.
‫Quindi in questo momento qui
‫abbiamo la
‫difficoltà e il prezzo della durata del nome e
‫quindi aggiungiamo anche la valutazione e
‫che deve essere tra virgolette 4. 7.
‫Va bene, e ora arriva il momento.
‫Invia e infatti ci siamo.
‫Quindi questo è il tour che
‫abbiamo appena creato.
‫Abbiamo la nostra valutazione.
‫Abbiamo il nostro nome e abbiamo il nostro prezzo.
‫E, naturalmente, l'ID creato automaticamente.
‫Ora potresti notare che non abbiamo alcuna difficoltà
‫e nessun prezzo.
‫Ebbene, perché pensi che sia così?
‫Bene, questo perché questi due campi in realtà
‫non sono nel nostro schema
‫e quindi non vengono inseriti nel database.
‫Quindi tutto il resto che non è nel
‫nostro schema viene semplicemente ignorato.
‫Quindi questo è il potere del nostro schema, ok?
‫Ottimo, ora proviamo a inviarlo di nuovo e
‫quindi dovrebbe darci un errore, giusto?
‫E infatti ci siamo.
‫Abbiamo la nostra 400 cattiva richiesta.
‫E abbiamo questo messaggio che è l'errore
‫completo che abbiamo ricevuto.
‫E così qui vediamo che il messaggio di errore è una chiave duplicata.
‫E questo perché abbiamo già il Test Tour 2.
‫E quindi non poteva crearne un altro.
‫Quindi creiamone un altro qui come Jonas Tour.
‫Non ha molta importanza, ok?
‫Voglio solo crearlo, prima
‫senza niente di tutto questo solo
‫per vedere se otteniamo un altro errore.
‫E infatti otteniamo alcuni più errori qui.
‫Questa volta dicendo che la convalida del tour
‫è fallita perché un tour deve
‫avere un prezzo.
‫Ok, quindi vedi che in questo momento
‫abbiamo questo tipo di strana struttura di errore qui.
‫Quindi Mongo DB restituisce questo enorme oggetto di errore completo.
‫E più tardi ce ne occuperemo davvero.
‫Quindi avremo un'intera sezione sulla sola gestione degli errori.
‫E per allora creeremo alcuni errori più significativi.
‫Ok, per ora sostituiamo questo oggetto di
‫errore con una stringa normale qui.
‫Quindi diciamo dati non validi inviati.
‫Ok, quindi non fare qualcosa del genere in una vera applicazione di
‫produzione, ma di nuovo avremo una
‫vera gestione degli errori un
‫po' più tardi che se ne occuperà.
‫Ok, quindi mostro errori significativi al cliente.
‫Quindi torniamo qui e
‫rimandiamolo.
‫E così ora otteniamo questa stringa normale qui.
‫Quindi creiamo il prezzo qui.
‫Impostiamolo a 567 e poi
‫lo inviamo.
‫E così ora vedrai che la nostra
‫valutazione predefinita qui funziona ancora.
‫Cerchiamo ora di capire tutto questo anche in bussola.
‫E infatti otteniamo i nostri quattro tour nel database.
‫Quindi tutti questi strani test che abbiamo fatto
‫fino a questo punto.
‫Quindi andiamo avanti ed eliminiamo questi ultimi due.
‫Era davvero solo per testare.
‫Bene.
‫Quindi qualcosa è andato storto qui, immagino.
‫Ok, ora torniamo a questi due.
‫Creiamo ora solo il terzo che
‫avevamo prima nell'ultima sezione.
‫Che è l'avventuriero della neve.
‫Quindi l'avventuriero della
‫neve.
‫Il prezzo era...
‫Non sono più
‫sicuro come 697 forse.
‫E il punteggio
‫è come sei o addirittura 4. 8.
‫Ha mandato quel ragazzo.
‫E quindi eccoci qui.
‫Grande.
‫Giusto per ricapitolare rapidamente la nostra funzione createTour.
‫Quindi abbiamo un tentativo di cattura qui perché stiamo effettivamente utilizzando una
‫funzione di attesa asincrona qui.
‫Giusto, quindi usiamo asincroni aspettano perché
‫questo tour. create restituisce una
‫promessa che stiamo aspettando
‫in modo che possiamo quindi memorizzare il documento
‫del tour appena creato all'interno di questa
‫variabile e quindi inviarlo insieme
‫alla risposta al client qui sotto.
‫Va bene, ma nel caso in cui si
‫verifichi un errore, ad esempio un
‫errore di convalida, tale
‫errore verrà rilevato e invieremo qualcos'altro
‫al client con questo messaggio di errore.
‫Ecco come creiamo documenti usando la mangusta.
‫Successivamente parleremo della lettura dei documenti.