>> Also, mit diesem wird gesagt,
einfach irgendwie eine einfache Einführung in Prototypen
und der JavaScript-Objektmodell.
Wir gehen nicht zu verschieben Räder ein wenig zu reden
mehr über JavaScript auf die Server und der Bücherregal-Bibliothek
und die Verbindung Knex Library.
Also, kann man eigentlich nur -
wenn Sie sich für Bookshelf.js suchen sollte es ziemlich leicht
zu finden, sollte zunächst sein Ergebnis-und Bücherregal
David gerade erwähnt gibt eine Menge Struktur
um JavaScript-Objekte und Arbeit mit ihnen relational
in relationalen Datenbanken.
So viele ähnliche Merkmale der eigentlich stark inspiriert
von Laravel ORM als sowie die Backbone.js,
das ist ein Front-End MVC ist Bibliothek, die es Ihnen erlaubt
, um den Code zu strukturieren, ähnlich wie das, was ich zeigen
mit den Beispielen der Prototypen, wo Sie können -
statt nur willkürlich Werfen Klassen
Ihre Ansichten hier und da.
Es gibt Ihnen Modelle und Sammlungen dieser Modelle
die angeblich so wirken, werden Art ein Single Point of Truth
zu den Daten für Ihre Anwendung.
Und dann hören Sie, wie die Modelle Veränderungen, Sie sagen, OK,
neu rendern dieser Vorlage hier und dieses hier
und nicht nur hier Klasse hinzuzufügen, hinzufügen Klasse gibt und irgendwie holen
Selektoren und machen die Spinnennetz von jQuery-Code.
Es gibt mehr von einem klassenbasierten Struktur, um einzelne Stücke,
aber ein wichtiger Bestandteil der Bibliothek ist, dass die Modelle
die eine ähnliche Struktur haben, Bücherregal, was Modelle zu tun.
Also, wenn Sie mit dem vertraut sind Bücherregal du bist ziemlich auch
ziemlich vertraut mit Backbone.js Modelle,
und ich würde empfehlen einen Blick auf diese.
Also, einige der wichtigsten Features
dass es Sie gibt nur die Fähigkeit, Daten auf ein Objekt eingestellt
rufen zu holen, die gibt einen einzelnen Datensatz
aus der Datenbank zu erstellen Beziehungen als ähnlich
zu dem, was Sie behandelt innerhalb von Laravel
wo Sie sagen, ein Patienten einen Rekord-Methode
und sagen, das ist Rekord gewonnen
wo der Datensatz-Objekt ist Tabellennamen Gesundheitsakten.
Mal sehen.
Hat viele - es gehört -
nur Sachen, die Sie ziemlich ähnlich -
ziemlich vertraut mit schon, aber in JavaScript.
Und unter der Haube, für Bücherregal,
es einen Abfrage-Generator verwendet genannt Knex.js.
Also, das ist Knex, knexjs.org.
Es ist ein Verweis auf das Spielzeug, wenn jemand jemals mit diesem gespielt.
Aber es können Sie - in eine ähnliche Art und Weise, um jQuery,
Sie einfach irgendwie schaffen ein Kette verschiedener Methoden
dass Sie sich auf den Aufruf sind Ihre Datenbankzeile, so können Sie -
Sie sagen, begann Knex und der Name der Tabelle.
So zum Beispiel Knex Benutzer auswählen, welche Spalten Sie möchten,
wo und wo unterschiedliche conditionals und Sie können
Und wo, OR, wo zwischen denen, wo nicht,
Sie jetzt auf der ganzen Linie.
Sie können verschiedene Verknüpfungen angeben zwischen Datenbanktabellen
Bücherregal, die intern verwendet einzurichten Art von Magie
rund um die hasOne, hasMany, belongsTo, belongsToMany.
Und so dass die Kombination
der beiden, die Sie tun können ziemlich viel, was Sie verwendet werden würde
in Frameworks wie Laravel in Bezug
Funktionalität Arbeit mit Datenbanken.
Also, lasst uns gehen Sie vor und nehmen ein Blick auf ein einfaches Beispiel
für einen Express-App, die nutzt diese Modelle
und Sammlungen Bücherregal jazz [phonetische].
Also, ich habe bis nur eingestellt einfache Anwendung hier.
Ich zog einige der Sachen wurde, dass die Initialisierung express
und verschieben, dass in ein init Verzeichnis, das ich erstellt habe.
Eines der schönen Dinge über Arbeiten mit Express als angenommen
um Laravel ist, dass es wirklich nicht viel durchgesetzt
Sie conventionalized auf.
So können Sie Verzeichnisse erstellen -
es nicht wirklich geben Ihnen eine ganze Menge, um weg von der Arbeit.
Sie haben einfach irgendwie bekam einige Grundeinstellungen und dann -
aber es egal wo Sie sie setzen.
Sie müssen nicht zu haben, Verzeichnis-Controller.
Sie brauchen nicht, ein-Modelle haben Verzeichnis, eine config.
Sie können Art erstellen die als Projektanforderungen
und setzen die Dinge den Weg Sinn machen, dass die meisten zu Ihnen.
Also anstatt alle Diese ausdrückliche Text
in den Haupt app.js ich gerade gesagt App Gleichen benötigen init / Express.
Und das in der init,
die Initialisierung Ordner Ich habe hier Express,
und dies erfordert Express, Anrufe die Setup-Funktion ruft die -
richtet den Blick auf Motor, JSON-Parser, das alles.
So, jetzt wollen wir auch weiterhin nach unten.
Also ich bin erfordern die Kursleiter Sitzung
Modelle und Anforderungen.
So sind diese in einem Ordner, Ich habe gerade auf Name-Modelle entschieden.
Es muss nicht so sein So macht es allerdings Sinn,
Modelle, aber nur recht häufig, so würde ich es empfehlen.
Aber - So gehen wir für den Kurs.
Ich glaube, ich bin mit - ja, und die Beispiele
hier unten basieren alle um den Kurs-Modell.
Lassen Sie uns also nur nehmen einen Blick auf die.
So, jetzt, nur von der erste Zeile dieses Modell,
Ich bin schon erforderlich etwas anderes.
Also, wenn Sie in Knoten bemerken sollten Sie erfordern
oder Sie gehen, um am Ende sind eine ganze Reihe erfordern
unterschiedlicher Dateien , die sich befinden
an unterschiedlichen Orten in Ihrer Anwendung.
Und die relative Pfade , wo immer Sie sind
in Ihrer aktuellen Anwendung
es sei denn, es ist ein Top-Level bereits definiert, wie in Sie es installieren
mit MPM wie Bücherregal oder Knex oder Express oder so etwas,
die sind nicht relativ.
Ja? Zoom in mehr?
OK. OK. Also, Sie gehen zu am Ende eine ganze Menge erforderlich
nur verschiedene Dateien in Ihrem Code, was gut und schlecht ist.
In einem guten Weg Sie wissen, wo Dinge sind und es ist nicht sortieren
der Magie, was ist geht unter der Haube,
das ist wirklich verwirrend sein kann
wenn Sie einen sehr haben Schwer Java -
oder sehr schweren Rahmen wie Laravel, die Art sagt,
wir werden darauf achten, Dies, so dass Sie nicht haben,
alles benötigen aber Sie haben
zu wissen, wie alles, was arbeitet, um es zu benutzen.
Wo, wie in diesem Fall, ist es sehr einfach, wie zu
wo alles ist, sie sind nur Enden
bis ein wenig mehr mit der Eingabe.
So wie in der Seiten Ich mag zu benutzen, gibt es ein Plugin
wenn Sie ein Blindtext verwenden
wo Sie den Knoten installieren Module Helfer und Sie können
wie Instructor geben und es den relativen Pfad erstellt
, wo Sie sind, dass Code-Datei, eine Art nützlich.
Also, die Kursmodell Hier wird Basis erfordern
und dann intern Basis erfordert init / Bücherregal
und dann das Bücherregal, es erfordert die Top-Level-Bücherregal
und dann initialisiert es mit die initialisiert Knex Beispiel
welche den Client-Namen setzt
und die Verbindung Einstellungen für die Datenbank.
Also ich bin gerade mit einem einfachen Instanz von Sequel Pro denen -
MySQL, ich Zugriff auf sie mit Sequel Pro und es hat einfach irgendwie
einer ähnlichen Datenbank Setup, da wir
in der ersten Beispielanwendung mit dem Kurskatalog.
Also, habe ich meine Verbindung Einstellungen hier
und diese sind alle dokumentiert auf der Projekt-Seite Knex.js
, wie die Einrichtung diese Verbindungen.
So, ich habe jetzt meine Basis-Modell.
Und als ich mit erwähnt der Prototyp Wandel,
damit kann man eigentlich sein, eine Art viel zu -
fügt eine Menge von Text Ihren Code so Konvention
angepasst wurde, dass von Backbone.js
und jetzt ist Bookshelf.js fügen Sie diese Methode erweitern
als statische Eigenschaft auf Ihre JavaScript-Objekte,
die gibt es eine Art von fast klassenbasierte Vererbung Natur
wo, wenn Sie anrufen erweitern können Sie einstellen, jede
der Prototypverfahren dass Sie hier gerne
und dann können Sie - jede zusätzliche statische Methoden
dass Sie vielleicht, Sie kann nur setzen sie sich
hier, so kann ich es verlängern mit - so, wenn zum Beispiel
mehrere Modelle benötigt Anzeige Namen und diese bekommen Namen.
Also, hier, ich sage das Anzeigenamen für das Modell
Standardmäßig ist unabhängig von seinem Namen Immobilie ist anders Rückkehr
kein Name.
Und jetzt auf jeden Das ist ein Modell -
dass sich diese Basis-Modell, ich Jetzt haben Sie einen Anzeigenamen Methode
am Prototyp Kette irgendwo.
Und wenn ich sie überschreiben Ich kann einfach legen Sie es - gesetzt, was -
getName hier sein würde.
Und es ermöglicht Ihnen zu imitieren klassische Erbe
in JavaScript, die sein können, schöne Dinge, insbesondere für
THAT verleihen werden sich als Klasse basiert wie Objektmodelle.
Also lassen Sie springen zurück in der Anwendungscode.
Also habe ich eine Route für gerade Schrägstrich, nur für meinen Zeige
und dann Schrägstrich Kurse.
Und diese beiden fordern die renderCourses Methode.
Also noch einmal, sind Funktionen der ersten Klasse und übergeben werden
als Argumente an Methoden.
Also, in diesem app.get, Ich rufe -
Ich bin vorbei renderCourses als Argument.
Und machen - oder Funktionen kann Setup wie var -
als ich tat, früher var renderCourses gleich Funktion
oder sie können nur Funktion renderCourses.
Es nicht zu machen einen großen Unterschied.
Sie können tatsächlich haben, was Name Funktion aufgerufen werden
Ausdrücke, die sind var renderCourses Gleichen
Funktion renderCourses.
Und der Grund zu wollen, haben Name Funktionen besonders
im Knoten ist, dass es gibt Ihnen einen Reiniger -
lesbarer Stack-Trace.
Also, wenn Sie eine ganze Reihe haben
von anonymen Funktionen es wird sagen -
wenn Sie eine Fehler haben im Code du wirst -
Sie werden nicht wissen, welche Funktion es ruft dich hätte zu sehen
an der Code-Nummer und die Zeilennummer
und es ist manchmal leichter nur visuell zu analysieren
wenn Sie tatsächlich haben Namen
für die Funktionen sich auf der Server-Seite.
Also diese renderCourses, nennen wir Knoten Apps -
so ich höre auf Kern 3000 [phonetische].
Und so ist alles richtig machen hier ist nur immer alle
Kurse aus der Datenbank.
Ich bin nicht einmal begrenzen es tut so eine riesige Anzahl
Zeilen es zurück.
Und um dies zu tun,
auf den Verlauf Modell gibt ist eine statische Eigenschaft
Sammlung genannt.
Und so nenne ich es einfach - ich der eine neue Kollektion
Für diesen Kurs, dann abrufen,
und dann die Kurse zurück Sammlung, die hier in der Verheißung.
Also intern, David in - der letzten halben lehrte ein wenig
über Versprechungen und Verheißungen sind sehr stark in beiden Knex verwendet
und Bücherregal, weil es verleiht dem -
Es gibt Ihnen die Fähigkeit, einen Haufen haben
von verschiedenen asynchrone Aufrufe und irgendwie kommen dann zusammen
oder etwas zu holen, und dann
mit diesem Aufruf einer anderen asynchrone Datenbankaufruf
und Rück diesen Wert und dann zum nächsten zu springen, dann
und im nächsten dann und dann haben ein fangen ganz am Ende zu sortieren
der mimischen asynchrone Try-Catch Verhalten mit asynchronen Code,
weil Sie jetzt sind es zu sehen
aber es ist noch schwieriger, wenn Sie beginnen, um damit umzugehen.
Asynchrone Code ist einfach überall
in Server-Seite JavaScript und wirklich in einem viel größeren Ausmaß
als Sie es gewohnt sind, wenn Sie haben JavaScript getan
auf der Client-Seite.
So, dass wirklich, wirklich Ihnen geholfen, da draußen.
Aber nur, um Ihnen zu zeigen, der Debugger-Anweisung
dass ich über im Gespräch die Knoten Inspektor Werkzeuge,
Ich werde weitermachen und werfen einen Debugger Linie hier
in der Funktion renderCourses und sehen, wohin das führt mich
wenn ich - so Knoten Inspektor kann installiert werden
indem NPM installieren mit einem G-Flag,
Global bedeutet, welche Node Inspector.
Und es wird es für NMP holen und installieren Sie es global
für Ihre Anwendungen so dass Sie nur nennen kann
von der Kommandozeile.
Ich habe bereits installiert haben Ich werde es so weiter gehen und -
tatsächlich es haben könnte warten sie nur nehmen werde,
nehmen Sie zwei Sekunden.
Und welche Knoten Inspektor wieder erlaubt
tun müssen, ist dieses Headless haben Version der Debugger-Konsole
dass Sie bei der Arbeit gewohnt sind auf der Client-Seite und in der Lage
zu stoppen, fügen Sie einfach angegeben Punkte in Ihrem Code.
Stoppen Ausführung und nehmen ein schauen, was los ist,
das ist wirklich hätte kommen in praktisch, wenn die Funktion
wie die zur Verfügung standen
bei der Fehlersuche PHP-Code bin ich sicher.
Lassen Sie uns also nur nehmen einen Blick auf die.
Also habe ich einfach anrufen Knoten Inspektor
und es wird sagen, besuchen Sie diese URL Port 5858, um das Debuggen zu starten,
das ist nur die Standard- , wie er startet.
Also, ich habe jetzt habe - es gibt nichts los hier
weil ich, um zu starten.
So Knoten Sackgasse [phonetische] die Debug-Flag und dann app.js.
So sagt es Debugger lauscht auf Port 5858,
Express-Server Zuhören auf 3000.
Wir sind also gut zu gehen.
Lassen Sie mich nur diese zu aktualisieren.
Und jetzt kann ich die app.js sehen Code, ich war gerade auf der Suche an
aber hier in der Konsole.
So, jetzt, wenn ich versuche, diese auszuführen, Sie können es sehen, stoppt er.
Es ist nur darauf warten, weil seine gesamte Code-Ausführung ist jetzt
blieb auf diesem Debugger Linie, die ich in es gesetzt.
Und ich kann jetzt Server -
[Inaudible Bemerkung]
Oh, ja. Was ist das Schlüsselwort Verknüpfung zum Bildschirm vergrößern?
Oh da ist.
Verstanden. OK.
[Pause]
Oh, es ist nicht auf der Suche [Phonetische], dass.
Also, das ist wirklich groß Kurse
da mache ich nicht ein Klausel oder etwas zu begrenzen,
es ist nur das Abrufen der gesamte Datenbank von Kursen
, die eine Menge von ihnen.
Und so - das Objekt ist
dass tatsächlich abstürzen die Note Inspektor Instanz.
Es ist - OK.
Lass es mich tun, und eine Grenze dann können wir einen Blick
wenn es nicht zu holen Hunderte von Kursen.
Also, töten den Server und Inspektor
und ich werde natürlich tun Sammlung Abfragelimit 20.
Also, im Bücherregal, anders als in Laravel
wo man einfach anrufen direkt zu begrenzen oder rufen jede
dieser SQL-Methoden , die Sie verwenden
direkt auf dem ORM-Instanz.
Jederzeit, die Sie gerade verwenden sind SQL-Methode, die vorgesehen ist
in Knex, haben Sie rufen Sie die Abfrage zu sortieren
von tippen Sie in der Abfrage-Kette.
Und dies kann aufgerufen werden, entweder mit einer Funktion,
so kann man sagen, Funktions diese Grenze 10 oder Sie es nennen
indem Sie die Methode, die Sie anrufen möchten
auf der Knex Instanz und dann die Wert.
So werden wir zu tun 20 zu begrenzen und dann einstellen.
Wir haben eigentlich nicht müssen Debugger hier
weil wir es können nur Haltepunkte
und das macht es einfacher.
Gut.
Also, lassen Sie einen Haltepunkt versuchen hier und um es zu laden.
Falsche Zeile.
Genau hier.
[Pause]
OK. Also hörte es wieder.
So, jetzt ist ein Kurse Objekt mit einer Länge von 20
und wir sehen alle unterschiedlich sind, Modelle, die es geholt
aus der Datenbank hier also habe ich ein Modellobjekt bekam
was hat innerhalb der Attribute Immobilien
auf dem Objekt sind all die Dinge, dass es in der Datenbank gefunden.
Alle Ereignisse, die registriert
so können Sie sich registrieren verschiedene Ereignisse,
beispielsweise wenn die Modell gelöscht wird
oder, wenn es abgerufen wird,
Sie verschiedene einstellen können Eigenschaften oder Dinge ändern.
Es gibt eine Menge von verschiedenen Haken und diese sind alle dokumentiert
in den Bookshelf.js Dokumentation, die Sie erlauben
zu Art etwas zu tun dass Sie wirklich wollen
Ihre Modelle mit und Sammlungen.
Sie können - sie gemeint sind um wirklich kunden
und einfach Sie sie anpassen
auf die Bedürfnisse Ihrer Anwendung.
Aber gerade auf der Suche durch hier
Ich sehen, was die verschiedenen kann Plätze stehen zur Verfügung.
Und in diesem Fall I eigentlich nicht holen
mit anderen andere als Daten nur die Kurse selbst.
Aber in ähnlicher Weise wie Eloquent die ORM können Sie einstellen,
die Beziehungen, so dass der Kurs gehört zu viele Lehrer.
Also, wenn ich voran gehen und die Anwendung zu beenden,
springen, um diese zu holen Gesprächs können Sie können verschiedene Optionen angeben
dass Sie möchten, Pass auf, es zu.
Und einer von ihnen ist die Fähigkeit zur zugehörigen Code zu laden
durch die Angabe withRelated Ausbilder dann Kurse.
Lassen Sie uns also zurück und frisch gehen das hier wieder zu stoppen.
So, jetzt wenden die Kurse, dieselbe Anzahl von Modellen,
aber jetzt jedes Modell hat einen Hash-Beziehungen
die die Lehrer hat , dass es im Zusammenhang mit.
Also dieser Kurs beispielsweise
welcher Kurs ist 082 hat zwei bezogenen Lehrer-Modelle.
Und schon sehen können, wie dies ist viel einfacher zu sortieren
von visuell als arbeiten wenn man mit Sachen zu tun
dass Sie den Code Art ändern und dann versuchen, es wieder in PHP.
Die Tatsache, dass Sie nur ganz zu stoppen Ausführung
und zu bewerten, was hier und die - in der Konsole, die -
Verkleinern, ist Kurse, wissen Sie,
was, dass die lokalen Bereich Variablen sind
und dies ist derzeit der globalen Objekt, weil, wie Sie es gesehen haben,
wenn Sie mit einem Anruf spezifischen Kontext, wird es nicht
etwas relevant hier haben.
Und dann, die - lassen Sie mich zeigen ein paar Beispiele
Umsetzung der Versprechungen.
Also anstatt dies zu tun, withRelated Lehrer hier bin ich
gehen, gehen Sie vor und bewegen Sie diese zu holen und dann die Kurse,
Ich werde zurückkehren courses.load Ausbilder.
Und dann - dann, dann rufen Sie an.
[Pause]
Also an dieser Stelle, die Kurse sollten geladen werden
mit den Ausbildern, die asynchron Aktion.
Aber weil wir es zurück von einem Versprechen, der nächste Wert
für was auch immer, dann ist dies asynchronen Aufruf zurück
die in diesem Fall Last ist ein Verfahren in Regal
dass tatsächlich zurück die Sammlung sich.
Also ist es das Laden der Lehrer dort
und dann kann man angeben - wenn es nur eine Eigenschaft ist,
Sie können dies angeben als String, sonst
Sie Lehrer tun können und Anforderungen
als Methode - sorry, als Array.
Und dann, wenn Sie gerne bekommen würde wirklich Lust und zwingen jede
davon gegeben holt Sie kann es als Hash angeben
mit Lehrern und was dann Sie möchten, um die Abfrage auf begrenzen.
Also, würde Ich mag alle laden Ausbilder auf Kurse, in denen -
so QB für Query Builder wo Status ist aktiv.
Und können Sie wirklich Phantasie mit einem
der damit verbundenen Fragen Sie möchten bauen.
Aber, nur für jetzt, wir gehen um nur Ausbilder bleiben
und wir diesen Wert zurück
so dann die nächste, dann sollte haben alle Kurse geladen
richtig.
Und wenn es einen Fehler bei jedem Schritt in dieser Kette,
es wäre bis auf den Fang zu springen.
Also lassen Sie uns gehen Sie vor und führen Sie die.
Also jedes Mal, wenn - anders als in PHP ist ein Nachteil der
"Weil der Knoten" ist eine lange Lauf Verfahren, die Sie tatsächlich benötigen
um den Knoten Prozess zu stoppen wie Sie Ihren Code zu aktualisieren,
weil die Version, die es in der Laufzeit ausgeführt ist,
die Version des Code, der geladen war
wenn nicht gestartet was Sie haben Art
von aktualisierten Code seitdem mit.
OK. Wir werden einen Haltepunkt setzen hier, hier und Aktualisierung.
[Pause]
Oh, habe ich eigentlich nicht aktualisieren Sie diese Seite entweder
so war es auf dem alten Verfahren.
So aktualisieren Sie sowohl diese und der Knoten Inspektor.
So, jetzt sehen wir Kurse.
Wenn wir nur nehmen Probe eines dieser Modelle,
wir sehen können, dass die Beziehungen Objekt leer, aber jetzt -
und der Grund, dass Sie Breakpoints gesetzt ist, nun ja,
Ich erwähnte, dass man Sprung in den Stack-Trace
und sehen, wissen Sie, wo es wird in der App.
So, jetzt kann ich sehen, was ist geschieht in der Load-Methode,
die ich definiert haben auf der Kollektionen.
Es Art von "Eager Lasten Beziehungen auf eine bereits ".
Und Sie können durch Schritt und sehen, Zeile für Zeile
wo dieses Zeug ist gehen das ist toll.
Wenn Sie etwas haben, das ist in Ihrem Code gebrochen,
es einige Fehler und werfen Ihnen, ich möchte wirklich sind
um zu sehen, wohin das führt.
Aber sobald man in laufen etwas asynchron, das -
sie geht in die nächste Zecken von der Ereignisschleife
und Sie werden Ihre verlieren - Sie Ihren Platz zu verlieren
im Knoten Inspektor.
Sie müssen also sagen, "OK, wenn ich diese verlieren,
es muss jetzt aufhören an dieser Linie noch einmal. "
Denn wenn ich immer schlagen unten, unten im Stapel,
es wäre schließlich haben nur weg weg hatte ich nicht diese Einstellung
Leitung 22 blau Bruchlinie.
So, jetzt, wenn ich mir an Kursen hier
es sollte auf Beziehung Ausbilder
und dann haben die Instruktoren bringen Sie sie.
Also, Sie sehen, dass ich wieder ein Versprechen aus dem ersten Versprechen
Und dann kann man immer zu tun, dass auf der ganzen Linie.
Also die verschiedenen Versprechen, versprechen, Bibliotheken,
Ich habe eine namens Bluebird das ist wirklich nützlich.
Es fügt eine Menge netter dieser zum Ändern asynchron -
Ändern Rückruf Basiscode in Sachen
das funktioniert auch mit Versprechungen.
Aber - sorry [unverständlich] was Ich würde sagen, es gibt.
Werfen wir einen Blick wenn am -
so sagen wir, dass es eine Problem, wenn etwas zu holen.
So habe ich diese andere Route genannt Kurs-ID zu finden.
So machen wir natürlich zwei.
Kann ich - JSON Platz.
Und das tut [unverständlich].
[Pause]
Ich rieche etwas falsch hier.
Nicht auf 3000, war ich auf das Chrome-Inspektor Registerkarte.
OK. Also lassen Sie uns gehen Natürlich - natürlich ein JSON.
Und das gibt nur in JSON Format, der Kurs belasteten
mit einigen Lehrern.
Aber das Beispiel wollte ich hier zu geben ist, dass,
Ich mache natürlich JSON-ID.
Und in den Parameter zu holen, Ich Angabe erforderlich wahr,
das ist eine Option, die ist im Bücherregal dokumentiert
wo er sagt, dass, "Wenn, Ich versuchen, und finden diesen Kurs
und es ist nicht da, dann werfen Sie einen Fehler. "
Und dass durch die gefangen werden sollen Catch-Block hier unten.
Also lassen Sie uns gehen Sie vor und zurück springen in den Knoten Inspektor und versuchen
und brechen diese und sehen, was wir bekommen haben.
Setzen wir also eine Pause hier auf der JSON-Kurs.
Gut.
Ich werde natürlich gehen und JSON Ich würde nur in einigen gesagt -
[Pause]
Es kann ein wenig knifflig sein manchmal, wenn Sie versuchen,
zu verwalten, welche ein wurde aktualisiert
und noch nicht - mal sehen.
So ist es den Aufruf Fehler leere Antwort.
[Pause]
Werfen wir einen Debugger hier.
Weil, wie Knoten tatsächlich optimiert
für die JavaScript-Laufzeit so schnell auf dem Server sein,
manchmal der Knoten Debugger hat einige Fehler, wenn Sie versuchen,
Haltepunkte zu setzen und dynamisch und Sie tatsächlich tun müssen
, einen Debugger zu nutzen und nicht die Zeile-für-Zeile.
Also mal sehen, ob diese bringt uns das, was wir wollen.
Also ich, app.get json Kurs-ID,
und ich habe meine Debugger dort eingestellt
in der catch-Anweisung an der Unterseite.
Fetch erfordern wahr, es sollte - alles in Ordnung, da haben wir zu gehen, brach.
So, jetzt kann ich sehen dass es gestoppt
in dieser letzten catch-Block weil die withRelated -
oder weil der wahre erfordern angegeben und es gibt keine natürlich
mit der ID dieses großen Zahl durch eine Ausnahme
das ist jetzt eMessage.
Und jeder Fehler in JavaScript hat einen Stapel Immobilien
das kommt zusammen mit ihm.
So ist es oft sinnvoll, Um zum Beispiel
trösten abmelden e.stack.
Und ich kann tatsächlich sehen, wenn ich auf einen Fehler.
So bekomme ich Fehler leer Antwort ist, dass die Nachricht
das war über Bücherregal geschickt.
Aber jetzt kann ich einen Blick an der bei Call-Stack und sehen
dass im Bücherregal SQL-Dialekte Modell 83,
diese leere Antwort Fehler ausgelöst wurde.
Und das ist, wo ich erwähnt, ist es dot anonym
weil es eine anonyme -Funktion.
Wenn das ein Name, Funktion waren Sie bessere Ideen haben
zu, die tatsächlich funktionieren durch, ohne zu gehen
in die model.js Code.
Auch wenn es so sein soll ziemlich, ziemlich lesbar,
so kann ich sehen, dass Online.
Was haben sie zu sagen mir war Leitung 83.
Also, wenn options.require und die Reaktion nicht existiert,
es wirft nun einen neuen leere Antwort Fehler.
So haben Sie recht sehen können einfach, wie das funktioniert.
Und intern im Bücherregal,
dort sind nur eine ganze Haufen Verwendung von Versprechungen.
So können Sie festlegen, Promise.method
mit der Bluebird-Bibliothek die den richtigen Kontext hält
dies während der Rückkehr ein Versprechen.
Und so habe ich - ich bin verbindlich der Wert dieser ähnlichen
zu dem, was ich bereits erwähnt hatte, zuvor, jedoch unter Verwendung von Versprechen
und dann kann ich - ist neu.
Es kann asynchron sein oder nicht, wenn ich will.
Und dann mache ich einige andere Dinge, die kann
oder nicht asynchron sein und dann möglichen Sprünge nach unten diese.
So Promise.all ist ein Helfer, eine Menge von beliebten Bibliotheken
wo Sie eine haben Reihe von potentiell kann
oder auch nicht sein Versprechen.
Und wenn all das sind abgeschlossen, kehren Sie, dass
und dann springt er in der nächsten Zeile
und Sie, wie es wirklich sehen können flacht die Pyramide
dass Sie bekommen, desto Callback-Hölle als seine bekannte
wenn Sie tun alles, was mit Callbacks Zeile für Zeile.
Es gibt Möglichkeiten, um herumzukommen dass aber ein Versprechen
der besten Möglichkeiten, meiner Meinung nach
Ihren Code wirklich halten sauber und leicht zu lesen.
So, dass ist nur eine kurze Einführung in JavaScript
und Bookshelf und Knex im Allgemeinen.
Und, wenn es irgendwelche Fragen gibt, Ich weiß, es ist eine Tonne Material
zu Art versuchen und Deckel vor allem seit den Sprachen,
anders als die meisten, was du bist mit so wollte ich nur vertraut
zu machen, so dass zumindest wenn Sie Probleme haben
mit Ihrem Code, können Sie können Art springen -
das ist, was Ich mag zu tun ist Art in die Bibliotheken springen
dass ich mit und sehen wie die Dinge strukturiert.
Es gibt eine, die ich erwähnt hatte, früher genannt Backbone.js
und eigentlich ist es [Unverständlich] auf der Client-Seite
zu helfen, geben Modellansicht Reglerstruktur
Ihren Code.
Aber es hat tatsächlich kommentierte Dokumentation Quelle
die Ihnen erlaubt, eine Art zu sehen.
Es ist wirklich gut dokumentiert, was los ist,
wie es vermehren die Ajax-Funktionalität
oder die Veranstaltung Funktionalität oder die Modelle und Sammlungen Art
zu erklären, was ist los in den Prozess.
Und wenn Sie verstehen, die Grundlagen von JavaScript
wie der prototypische Vererbung und wie Funktionen verwendet werden
da beide Objekte und Werte und Klassen und alles.
Es macht es viel einfacher zu verstehen, was los ist
auf potenziell in die Bibliotheken, die Sie verwenden
und Debugger-Code und können werden, um nicht den Kopf hämmern
gegen die Wand, weil Sie verstehen nicht, wie die
verschiedene Stücke arbeiten, so.