‫-: (Uomo) Quindi in questa lezione
‫imparerai come concatenare più funzioni middleware per lo stesso percorso.
‫Quindi fino a questo punto, ogni volta
‫che volevamo definire un middleware, passavamo solo una funzione middleware.
‫Quindi, ad esempio, qui, per gestire questa richiesta di post,
‫abbiamo passato solo questa funzione middleware che è
‫il nostro gestore createTour.
‫Va bene? E quindi questa è
‫l'unica funzione che verrà chiamata ogni volta che riceviamo una richiesta di posta.
‫Destra? Ma ora diciamo che
‫vogliamo effettivamente eseguire più funzioni middleware.
‫Ora potresti chiedere "Perché dovremmo volerlo fare? ".
‫Bene, potremmo, ad esempio, eseguire un middleware prima di createTour
‫qui per controllare effettivamente i dati che stanno
‫arrivando nel corpo.
‫Destra? Quindi un po' simile a quello che avevamo prima.
‫Quindi abbiamo già fatto questo middleware di verifica dell'ID
‫per verificare se l'ID è effettivamente valido e farlo al di
‫fuori dei gestori di percorso effettivi
‫in modo che si preoccupino solo di ottenere, aggiornare o eliminare
‫un tour.
‫Destra? E quindi qui, in questo esempio specifico
‫con post, potremmo voler fare la stessa cosa.
‫Quindi, come ho detto, potremmo voler controllare se richiesta. buddy contiene effettivamente
‫i dati che vogliamo per il tour.
‫Va bene? E quindi facciamolo.
‫E in realtà, voglio che prima lo faccia da solo.
‫Quindi questa è una specie di sfida che voglio che tu
‫completi per usare i concetti di cui abbiamo
‫parlato così tante volte a questo punto e creare la
‫tua funzione middleware.
‫Quindi mi permetta di scriverlo qui come commento.
‫Quindi voglio
‫che crei una funzione middleware checkBody e lì
‫voglio che controlli
‫se il corpo contiene la proprietà name per il nome del
‫tour e la proprietà price.
‫Va bene? E se no, voglio che tu mi rimandi
‫un codice di stato di quattrocento.
‫In caso contrario, rispedisci quattrocento, che sta per
‫cattiva richiesta.
‫Quindi, in pratica, una richiesta non valida da parte del cliente,
‫che in questo caso sta cercando di creare un nuovo tour senza nome
‫e senza una proprietà di prezzo.
‫Va bene! Ed è proprio così.
‫E (ride) in realtà no.
‫Quindi voglio anche che tu lo aggiunga allo stack del gestore di post.
‫Fondamentalmente. Va bene?
‫Quindi voglio che tu lo aggiunga qui.
‫E in realtà ti dirò come
‫farlo perché non l'abbiamo fatto a questo punto.
‫Quindi è molto facile. Diciamo che la nostra funzione si chiama middleware
‫e quindi quello che devi fare è semplicemente aggiungere
‫quella funzione qui prima del gestore createTour che alla fine
‫creerà il tour. Va bene?
‫Quindi in questo modo quando abbiamo una richiesta di post
‫per questo percorso, eseguirà prima questo middleware e
‫solo dopo il createTour.
‫Va bene? Ecco come concateniamo due diversi middleware.
‫Ma ora voglio che tu vada avanti e crei questo
‫middleware chiamato in realtà checkBody.
‫Quindi metti in pausa il video ora e prova a farlo da solo.
‫Va bene! Quindi spero che tu abbia avuto successo
‫nel farlo e poi l'hai testato e che tutto funzioni.
‫Quindi ora lasciami andare avanti e implementarlo a modo mio.
‫Quindi abbiamo questo errore qui, ma non preoccuparti.
‫È a causa di questo middleware che non è definito.
‫E quindi lascia che lo faccia qui subito dopo il middleware checkID.
‫Quindi esportazioni. checkBody.
‫Dobbiamo richiedere una risposta e poi.
‫E quindi in realtà è abbastanza semplice.
‫Quindi, se non c'è richiesta. corpo. nome, e penso
‫che sia il nome, ma
‫andiamo avanti e controlliamolo velocemente.
‫Quindi è qui che il tour è semplice.
‫Sì, e in effetti si chiama "nome"
‫e l'altro è "prezzo".
‫Quindi, se non è presente il nome del corpo della richiesta
‫o il corpo della richiesta. prezzo bene, in
‫questo caso, come prima, torneremo da questa
‫funzione e invieremo una risposta.
‫Quindi lo stato qui è ricorda: quattrocento aggiungi quindi alcuni
‫"json" in cui lo stato è fail.
‫Quindi è sempre quando abbiamo un codice quattrocento.
‫Aggiungi quindi il
‫messaggio
‫"Nome o prezzo mancante".
‫Va bene? Quindi prezzo e nome devono essere presenti allo stesso tempo.
‫Quindi, se il prezzo non è presente o il nome non è
‫presente, inviamo già questo messaggio di errore.
‫Va bene? Ma se tutto è corretto, allora
‫vogliamo passare al prossimo middleware.
‫E quindi è quello che diciamo qui.
‫E poi il prossimo middleware sarà ovviamente createTour.
‫Quindi questo.
‫Quindi, andiamo avanti e poi aggiungiamolo qui.
‫Quindi tourController. checkBody.
‫Bene, ora l'errore è sparito e dovremmo essere in
‫grado di testarlo ora. Quindi chiudiamo quelli
‫che non ci interessano e creiamo un nuovo tour.
‫Quindi in questo momento abbiamo il nostro corpo con il nome, la
‫durata e la difficoltà, ma non c'è prezzo.
‫Quindi ora dovremmo ottenere il nostro errore. Destra?
‫Quindi testiamolo. Spedire. E infatti, abbiamo
‫"Nome o prezzo mancante" con la nostra quattrocento cattiva richiesta.
‫Va bene? E quindi analizziamo di nuovo cosa è successo qui.
‫Quindi la nostra richiesta ha raggiunto questa rotta qui
‫ed era una richiesta postale. Quindi, esegue questa
‫funzione middleware e da questa funzione inviamo questa risposta
‫dicendo che, beh, manca il nome o il prezzo.
‫Va bene? Ma se ora aggiungi il prezzo... quindi non
‫importa quale prezzo, invialo, beh, allora
‫tutto funziona bene e otteniamo un 201 creato.
‫Allora cosa è successo questa volta? Bene, ha verificato il corpo e questa
‫condizione non era vera e
‫quindi ha chiamato il prossimo middleware nello stack che è createTour.
‫Quindi ha creato un tour e ha inviato il risultato e
‫in questo modo ha terminato il ciclo di richiesta-risposta.
‫Destra? Quindi spero che sia stata una, uh, una bella
‫piccola sfida e useremo questo tipo
‫di logica qui tutto il tempo in cui concateniamo più
‫tipi di gestori qui per la stessa via. Quindi ad esempio qui potremmo controllare se un certo utente è
‫loggato o se ha
‫i privilegi, quindi i diritti di accesso, per scrivere anche un nuovo tour.
‫O davvero tutti i tipi di cose che vogliamo che accadano
‫prima che il tour sia effettivamente creato.
‫Va bene? E ancora una volta lo facciamo perché vogliamo prendere tutta
‫la logica che non riguarda
‫realmente la creazione della nuova risorsa al di fuori di quel gestore. In modo che quel gestore sia realmente
‫interessato solo al
‫lavoro che dovrebbe fare.