Tag 25 (Woche 5) - Der subtile Unterschied zwischen dem nächsten () und dem nächsten ()

Bevor ich den Unterschied zwischen dem Aufruf von next () und next () zusammenfasse, möchte ich den Tag zusammenfassen.

Unser typisches Friday Huddle bestand aus einigen Ankündigungen, Karrierediensten und einigen zukunftsgerichteten Informationen sowie einigen Präsentationen, an denen wir gearbeitet haben. Durch die Bereitstellung unseres Feedbacks verbessern wir unsere Konversation über den Code. Ich denke, das ist eine gute Sache, wir würden gerne mehr Zeit damit verbringen. Einer meiner Vorschläge für die weitere Entwicklung ist die Überprüfung der offiziellen Codes auf Github, um zu lernen, wie wir die Tools verwenden, mit denen wir die Codes anderer Personen am Arbeitsplatz anzeigen und interpretieren.

Ich hatte ein Einzelgespräch über meinen Lebenslauf und beantragte Briefe an Unternehmen, für die ich mich bewerben wollte. Jeder ist so organisiert und sich bewusst, dass er sich weiterentwickelt. Ich kann sagen, dass ich eine tiefe Erfahrung und Kenntnisse darüber habe, wie man einen Job in der Softwareentwicklung findet. Ich hoffe, ich kann diese Informationen erhalten und sie verwenden, um am Ende dieser Schulung einen Job zu finden.

Über den Unterschied zwischen dem Aufruf von next () und next (()) habe ich dies vor einigen Tagen zum ersten Mal bemerkt, als ich einige der nächtlichen Hausaufgabencodes durchgearbeitet habe. Es war so.

app.get ('/ post', Funktion (req, res, next) {Post.findById (1234) .then (Funktion (post, err) {if (Fehler) {return next (err);} if (! post ) {var notFound = neuer Fehler ('Nachricht nicht gefunden!'); notFound.status = 404; return next (notFound);} res.send (post);});});

Hier sehen wir uns eine GET-Anfrage auf dem Track / Post an. Bei der Rückgabe eines Anrufs scheinen wir Post.findById anzurufen, bei dem es sich wahrscheinlich um eine Datenbankabfrage handelt. Weil es darum geht, eine Verbindung zur Datenbank herzustellen und das Versprechen zurückzugeben. Dann klar - schauen Sie in die Funktion. Insbesondere sehen wir, dass wenn (Fehler) wahr ist, wir aufgerufen werden, zum nächsten (Fehler) zurückzukehren. Dann haben wir einen anderen (! Post), der zurückkehrt (notFound) und schließlich res.send (post), der das Ergebnis sendet, wenn wir keine Fehler gemacht haben und einige Informationen enthält. ). Senden Sie die Datenbankanforderung an den Browser zurück.

In anderen Beispielen würde ich etwas Ähnliches sehen.

app.get ('/ foo', Check CheckRegging (req, res, next) {if (! req.user.registr) {// Zum nächsten Pfad wechseln, wenn der Benutzer nicht registriert ist // // getRegration schlägt fehl. next ('route')}}, getRegistration-Funktion (req, res, next) {Register.find (Funktion (Fehler, Daten) {if (err) return next ( err) res.json (data)});});

In diesem Beispiel rufen wir einfach ('route') auf. Die natürliche Frage ist also: Was ist der Unterschied zwischen der Verwendung von return?

Wie ich heute weiß, verlässt der next () -Aufruf innerhalb der Route die Funktion nicht sofort und geht nicht zur nächsten Route. In diesem Fall wird der Rest der Route ausgewertet, und da next () aufgerufen wird, muss die Anforderung nicht aufgelöst werden, und wir gehen einfach zum nächsten geeigneten Routenhandler.

Machen Sie sich schnell eine Notiz: Wenn Sie die Anforderung innerhalb der Route nicht lösen, denken Sie daran, dass Express nichts an den Browser sendet und Sie aufhängt.

Wenn Sie also die next () - Nummer innerhalb der Route anrufen, wird Express einfach mitgeteilt, dass der Rest der Route fortgesetzt und zur nächsten geeigneten Route weitergeleitet werden muss.

Vergleichen Sie dies mit dem Aufruf von next () auf der Route. Der wichtige Unterschied besteht darin, dass beim Aufrufen von next () die Ausführung die Funktion sofort verlässt und zur nächsten übereinstimmenden Route wechselt. Es sieht aus wie eine Ausnahme. In unserer Reiseroute ist etwas passiert, und wir möchten nur den auf der Route verbleibenden Code überspringen und einfach zur nächsten geeigneten Route übergehen.

Mein Problem war der Versuch, eine Anfrage an MongoDB zu senden, wo alle meine Benutzernamen und Passwörter für meine App gespeichert sind. Wenn ich eine POST-Anfrage erhalte, dass der Client den von ihm angegebenen Benutzernamen und das Kennwort hat, muss ich die Abfrage ausführen, um festzustellen, ob ein Link in der Datenbank vorhanden ist. Dies ist ein asynchroner Aufruf mit einer Rückruffunktion. Express führt meinen Code weiterhin aus und wartet darauf, dass er aus der Datenbank zurückkehrt.

Es bedeutet, dass es schlecht für mich ist. Da der Express auf die Rückkehr aus der Datenbank wartet, wird die Ausführung ausgeführt und die Fehlermeldung wird angezeigt.

Fehler: Header konnten nach dem Senden nicht installiert werden

Diese Express-Geschwindigkeit wird fortgesetzt, wenn ich es wirklich nicht will. Als ich return next () verwenden wollte, habe ich next () verwendet.

Es war zu groß für mich, um das heute zu realisieren. Erstaunt über den Unterschied zwischen den beiden Glocken und es ist schön, den Zyklus zu beenden, der vor einigen Tagen eröffnet wurde. Ich kann jetzt zurückgehen und meinen Code für dieses Projekt löschen.

Eine letzte Sache - heute kam ein neues wöchentliches Projekt heraus. Wir müssen eine Webseite codieren, auf der Sie das klassische Spiel von Hangman spielen können. Ich werde es dieses Wochenende tun! :-)