Giorno 25 (settimana 5) - La sottile differenza tra next () e return ()

Prima di riassumere la differenza tra chiamare il prossimo () e il prossimo (), voglio riassumere il giorno.

Il nostro tipico venerdì Huddle consisteva in alcuni annunci, servizi di carriera e alcune informazioni lungimiranti e alcune presentazioni su cui abbiamo lavorato. Fornendo il nostro feedback, miglioriamo la nostra conversazione sul codice. Penso che sia una buona cosa, ci piacerebbe trascorrere più tempo con questo. Uno dei miei suggerimenti per andare avanti è rivedere i codici ufficiali su Github, per imparare come usare gli strumenti che usiamo per visualizzare e interpretare i codici di altre persone sul posto di lavoro.

Ho avuto un incontro individuale sul mio curriculum e ho fatto domanda per lettere alle aziende per le quali volevo fare domanda. Tutti sono così organizzati e consapevoli di andare avanti. Posso dire di avere una profonda esperienza e conoscenza di come trovare un lavoro nello sviluppo di software. Spero di poter ottenere queste informazioni e usarle per trovare un lavoro al termine di questa formazione.

Circa la differenza tra chiamare il prossimo () e il prossimo (()) l'ho notato per la prima volta qualche giorno fa quando ho lavorato su alcuni dei codici dei compiti notturni. È stato così.

app.get ('/ post', funzione (req, res, next) {Post.findById (1234) .then (function (post, err) {if (errore) {return next (err);} if (! post ) {var notFound = new Error ('Messaggio non trovato!'); notFound.status = 404; return next (notFound);} res.send (post);});});

Qui stiamo esaminando una richiesta GET sulla traccia / post. Quando si restituisce una chiamata, sembra che stiamo effettuando chiamate a Post.findById, che probabilmente è una query del database. Perché questo implica il collegamento del database e la restituzione della promessa. Quindi è chiaro: guarda all'interno della funzione. In particolare, vediamo che se (errore) è vero, siamo chiamati a tornare al prossimo (err). Quindi ne abbiamo un altro (! Post), verrà restituito (notFound) e infine res.send (post), che invierà il risultato se non abbiamo commesso errori e contiene alcune informazioni. chiamare). restituisce la richiesta del database al browser.

In altri esempi, vedrei qualcosa di simile.

app.get ('/ foo', Check CheckRegging (req, res, next) {if (! req.user.registr) {// Vai al percorso successivo se l'utente non è registrato // // getRegration ha esito negativo. err) res.json (data)});});

In questo esempio, chiamiamo semplicemente ('route'). Quindi la domanda naturale è: qual è la differenza tra l'utilizzo di return?

Come so oggi, la chiamata successiva () all'interno del percorso non lascia immediatamente la funzione e non passa al prossimo itinerario. In questo caso, viene valutato il resto della route e poiché viene chiamato next (), non è necessario risolvere la richiesta e passiamo semplicemente al successivo gestore di route appropriato.

Nota veloce: se non si risolve la richiesta all'interno del percorso, ricordare che Express non invia nulla al browser e si blocca.

Pertanto, chiamare il numero successivo () dall'interno del percorso indica semplicemente a Express che il resto del percorso deve continuare e passare al successivo percorso appropriato.

Confronta questo con chiamare il prossimo () sulla rotta. La differenza importante è che quando si chiama next (), l'esecuzione lascia immediatamente la funzione e passa alla rotta corrispondente successiva. Sembra uno scatto d'eccezione. È successo qualcosa nel nostro itinerario e vogliamo solo saltare il codice rimanente sul percorso e passare al successivo percorso appropriato.

Il mio problema era tentare di inviare una richiesta a MongoDB, dove sono memorizzati tutti i miei nome utente e password per la mia app. Quando ricevo una richiesta POST che il client ha il nome utente e la password forniti da lui, devo eseguire la query per vedere se c'è un collegamento nel database. Questa è una chiamata asincrona con una funzione di richiamata. Per quanto riguarda Express, continuerà a eseguire il mio codice, in attesa che ritorni dal database.

Significa che è male per me. Mentre Express è in attesa di tornare dal database, l'esecuzione è in corso e inizierò a visualizzare il messaggio di errore.

Errore: impossibile installare le intestazioni dopo l'invio

Questa velocità Express continuerà quando non la voglio davvero. Quando volevo usare return next (), ho usato next ().

Era troppo grande per me rendermene conto oggi. Stupito di quale sia la differenza tra le due campane, ed è bello concludere il ciclo che si è aperto pochi giorni fa. Ora posso tornare indietro e cancellare il mio codice per questo progetto.

Un'ultima cosa: oggi è uscito un nuovo progetto settimanale. Dobbiamo codificare una pagina Web che ti consente di giocare al classico gioco dell'impiccato. Lo farò questo fine settimana! :-)