‫Kursleiter: Willkommen zurück.
‫Ich hoffe also, dass Ihnen dieser Abschnitt bis jetzt gefällt und
‫Sie gerne mit Node. js.
‫Lassen Sie uns nun in
‫unserem Projekt weitermachen und eine extrem einfache Web-API erstellen.
‫Nun, um zu beginnen, was ist eigentlich eine API?
‫Nun, die lange Antwort werden
‫Sie in einem der nächsten Abschnitte lernen, aber vorerst die kurze Antwort,
‫zumindest in diesem Kontext von Web-APIs, im Grunde ist eine
‫API ein Dienst, von dem wir einige Daten anfordern können, In diesem Fall
‫handelt es sich also bei den Daten, die der Benutzer anfordern
‫möchte, um Daten zu den Produkten, die
‫wir in dieser Knotenfarm, also in diesem Projekt, anbieten.
‫Also habe ich hier diesen dev-data-Ordner, und darin habe ich eine
‫JSON-Datei, und JSON, falls Sie es nicht wissen, ist ein sehr einfaches
‫Textformat, das einem JavaScript-Objekt sehr ähnlich
‫sieht, also sieht es so aus ,
‫und wir können Arrays haben, die wir tatsächlich
‫haben, also haben wir ein großes Array, das
‫dann diese fünf Objekte enthält, und jedes Objekt hat
‫dann die ID, den Produktnamen, das Bild und so weiter
‫und so weiter.
‫Jetzt muss jeder von diesen eine Zeichenfolge für jeden der Schlüssel sein,
‫und dann haben wir den Wert.
‫Im Grunde sind diese Daten also das, was unsere API
‫auf Anfrage an den Client sendet.
‫Also werden wir hier noch eine andere Route haben.
‫Also genau hier, sonst, wenn der Pfadname gleich /api ist.
‫Und vorerst senden wir als Platzhalter die API
‫einfach so zurück.
‫Was wir jetzt also tun möchten, ist, die Daten aus dieser
‫Datei hier tatsächlich zu lesen, dann JSON in JavaScript zu parsen und
‫dann dieses Ergebnis an den Client zurückzusenden.
‫Also etwas ganz Einfaches und los geht's.
‫Der erste Ansatz hierfür besteht
‫also darin, in diese Route einzusteigen und dann die
‫Datei hier mit der Dateilesefunktion einzulesen, richtig?
‫Beginnen wir also damit.
‫Also FS. , und es ist tatsächlich
‫readFile, nicht fileRead, also readFile und dann der Name der Datei.
‫Denken Sie daran, wie ich Ihnen vorhin
‫gesagt habe, dass dies nicht die einzige Möglichkeit ist, unsere
‫Datei im Dateisystem zu finden.
‫Lassen Sie es uns jetzt tatsächlich noch verwenden, aber
‫nachdem wir es hier geschrieben haben, zeige ich
‫Ihnen einen anderen Weg.
‫Also, ein Hinweis, dieser Punkt hier bezieht sich tatsächlich auf das Verzeichnis, von
‫dem aus wir den Knoten-Befehl im Terminal ausführen.
‫Also noch einmal, dieser Punkt
‫hier stellt jetzt diesen aktuellen Ordner hier dar,
‫weil wir dort tatsächlich den node-Befehl ausführen, also in diesem 1-node-farm-Ordner, der
‫in diesem Fall sowieso unser aktuelles Arbeitsverzeichnis
‫ist, aber wir hätten es tun können Führen Sie den
‫Befehl node an einer anderen Stelle aus,
‫und dann würde der Punkt etwas anderes bedeuten.
‫So könnten wir zum Beispiel perfekt finden, zum Desktop gehen und
‫dort den Knoten ausführen und dann den gesamten
‫Pfad zum Index angeben. js, aber das könnten wir machen,
‫aber in diesem Fall würde der Punkt den Desktop bedeuten. Wenn wir also das
‫Skript vom Desktop aus starten, dann würde
‫dieser hier, dieser Punkt, den Desktop bedeuten,
‫und das ist also nicht immer ideal , und daher
‫gibt es einen besseren Weg.
‫Also alle Node. js-Skripts erhalten
‫sie Zugriff auf eine Variable namens dirname, und diese
‫Variable wird immer in das Verzeichnis übersetzt, in dem
‫sich das Skript befindet, das wir gerade ausführen.
‫In diesem Fall ist es also tatsächlich
‫derselbe Ort, weil index. js befindet
‫sich auch in diesem Node-Farm-Ordner, aber
‫aus den oben genannten
‫Gründen ist es oft besser, die dirname-Variable
‫zu verwenden wir verwenden
‫die Variable, also
‫ist es __dirname, was für den Verzeichnisnamen steht.
‫Und normalerweise machen wir es so.
‫Jetzt gibt es eine Ausnahme
‫von dieser Regel, nämlich die Funktion require.
‫Wenn wir also Module
‫benötigen, können wir tatsächlich unsere eigenen Module benötigen, und
‫das werden wir etwas später tun, wie
‫im nächsten oder einem der beiden nächsten Videos, und
‫dort bedeutet der Punkt tatsächlich auch die aktuelle Arbeitsweise Verzeichnis und nicht der
‫Ort, von dem aus wir das Skript ausführen.
‫Denken Sie also daran, dass die require-Funktion eine Ausnahme
‫von dieser Regel darstellt, aber normalerweise ist
‫der Punkt, wo das Skript
‫ausgeführt wird, und __dirname ist der Ort, an dem sich die aktuelle Datei befindet.
‫Nun gut, jetzt wollen wir die utf-8-Dateicodierung angeben und dann
‫unsere Callback-Funktion, die zuerst der Fehler ist, denken Sie daran,
‫und so haben wir jetzt Zugriff auf diese Daten.
‫Jetzt sind die Daten in JSON, und in JavaScript haben wir
‫etwas eingebaut, das JSON genannt wird. analysieren.
‫Dies nimmt also den JSON-Code,
‫der eigentlich ein
‫String ist, und wandelt ihn dann automatisch in JavaScript um,
‫in diesem Fall also ein JavaScript-Objekt oder -Array.
‫Nennen wir dies einmal productData,
‫und werfen dann auch noch schnell einen Blick darauf.
‫Also in diesem Fall in der Konsole.
‫Also, starten Sie den Server neu und vergessen Sie
‫jetzt nicht, die /api-Route zu wählen, und oh, was passiert hier?
‫Oh, wir haben den Server tatsächlich neu gestartet.
‫Und so bekommen wir
‫jetzt eine Antwort-API und werfen wir
‫nun einen Blick hier auf das Produktdatenobjekt.
‫Dies ist also nur ein schönes Objekt mit all den
‫Daten, die wir in diesen Daten hatten. json-Datei.
‫Alles klar, nun besteht der nächste Schritt darin, diese
‫Daten dann tatsächlich als Antwort zurückzusenden.
‫Nun diese Antwort. Die end-Methode
‫muss hier tatsächlich einen String zurücksenden und hier kein Objekt.
‫Was wir also tatsächlich zurücksenden möchten, sind
‫die Daten direkt, also sind Daten eine Zeichenfolge, die wir dann mit JSON
‫in ein Objekt umgewandelt haben. parse, aber für den
‫Moment hätten wir das eigentlich nicht nötig, aber ich habe es
‫trotzdem gemacht, weil wir das später brauchen
‫werden, wenn wir mit dem Erstellen unserer HTML-Vorlagen beginnen.
‫Dann benötigen wir diese Daten
‫in einem JavaScript-Format.
‫Im Moment möchten wir nur den tatsächlichen String zurücksenden,
‫den wir erhalten.
‫Bevor wir das tun können, müssen wir
‫tatsächlich angeben, dass
‫wir dem Browser mitteilen, dass wir JSON zurücksenden. Genau wie zuvor,
‫wo wir den Inhaltstyp auf text/html setzen, müssen wir
‫jetzt a Browser, den wir JSON senden.
‫Also sagen wir res. writeHead wie zuvor, und
‫jetzt verwenden wir den Statuscode 200, der
‫für okay steht, und dann das Objekt der Header.
‫In diesem Fall ist es nur einer,
‫also Content-type, und wenn wir JSON senden, müssen wir application/json sagen.
‫Für HTML ist es also text/html, für
‫JSON ist es application/json, und
‫sehen wir uns das jetzt an.
‫Laden Sie den Server hier sehr schnell
‫neu, und tatsächlich haben wir hier unsere API, die alle Daten zu
‫unseren fünf Produkten zurücksendet.
‫So großartig, das ist großartig, und es ist großartig, aber es
‫ist eigentlich nicht perfekt, weil
‫es nicht wirklich 100% effizient ist, und
‫das liegt daran, dass jedes Mal, wenn jemand jetzt
‫diese /api-Route trifft, die Datei gelesen und dann zurückgesendet
‫werden muss .
‫Stattdessen können wir die Datei nur einmal am
‫Anfang lesen und dann jedes Mal, wenn jemand diesen Weg
‫einschlägt, die Daten einfach zurücksenden, ohne
‫sie jedes Mal lesen zu müssen, wenn ein Benutzer angefordert wird.
‫Ist das sinnvoll?
‫Nun, was ich tun werde, ist, das hier zu veröffentlichen.
‫Okay, und natürlich brauche ich das alles nicht, also ist
‫das nicht hier, und das ist nicht
‫hier, und tatsächlich wird
‫es etwas anders sein, und das liegt
‫daran, dass wir jetzt tatsächlich die synchrone Version verwenden, und
‫ich weiß, was Sie denken, nämlich
‫dass die synchrone Version die Codeausführung blockiert, oder?
‫Und das stimmt zwar, aber in
‫diesem Fall ist es überhaupt
‫kein Problem, und das liegt daran, dass
‫der Code der obersten Ebene tatsächlich nur einmal am Anfang ausgeführt wird.
‫Nur diese Callback-Funktion, zum Beispiel hier,
‫die createServer-Funktion, also diese Funktion hier, wird jedes Mal
‫ausgeführt, wenn eine neue Anforderung
‫vorliegt, aber kein Code, der hier draußen ist.
‫Der Code, der sich außerhalb der Callback-Funktionen
‫befindet, der sogenannte Top-Level-Code, wird immer nur ausgeführt, wenn wir das
‫Programm starten, und daher spielt es in dieser Situation keine
‫Rolle, ob er die Ausführung blockiert, denn auch
‫hier gilt: es passiert nur
‫einmal und nur wenn der Code tatsächlich startet, oder?
‫Macht Sinn?
‫Und deshalb werden wir jetzt die Sync-Version verwenden, weil
‫es tatsächlich einfacher ist, diese Daten zu
‫verarbeiten, weil die Daten einfach in eine Variable gelegt werden, die
‫wir nicht sofort verwenden können.
‫Machen Sie sich also keine Sorgen darüber, dass diese Funktion blockiert, da
‫sie sich wiederum im Code der obersten Ebene
‫befindet und nur einmal ausgeführt wird.
‫Das Geheimnis hier ist einfach
‫zu wissen, welcher Code nur einmal und nur
‫am Anfang ausgeführt wird und welcher Code immer wieder
‫ausgeführt wird und ist daher problematisch beim Blockieren der Ereignisschleife.
‫Und natürlich werden Sie
‫das während des Rests dieses großen, großen Kurses lernen.
‫Sie erfahren also alles über die Ereignisschleife, und welcher
‫Code blockiert und welcher nicht und warum, und das ist nur das
‫erste Mal, dass ich es erwähne, aber es wird
‫nicht das letzte Mal sein.
‫Sie werden mich immer wieder dasselbe sagen hören.
‫Rufen Sie also nur diese eine Daten auf, und dann brauchen
‫wir natürlich nichts davon.
‫Verschieben wir das einfach hierher, und das war's.
‫Bevor also etwas passiert, werden die Daten aus
‫der JSON-Datei in Daten eingelesen.
‫Es wird dann auch das in ein Objekt parsen.
‫Nennen wir es hier dataObject, und was wir
‫hier tun werden, ist, diese Datei nicht
‫bei jeder Anforderung zu lesen,
‫sondern einfach die Daten zurückzusenden, die wir jetzt in unserem
‫Top-Level-Code haben.
‫Diese Daten hier kommen jetzt also von hier, weil dieser Code
‫in der Callback-Funktion natürlich aufgrund
‫der Bereichskette Zugriff auf den Code der obersten Ebene hat, oder?
‫Abbrechen, erneut ausführen und nur um Ihnen zu beweisen, dass
‫es immer noch funktioniert und es funktioniert.
‫So perfekt, und das ist besser, das ist effizienter, oh, und warum
‫habe ich das geschlossen?
‫Okay, lass es uns ganz schnell wieder aufmachen.
‫Auf geht's.
‫Das ist also unsere sehr einfache API, die es dem
‫Benutzer jetzt ermöglicht, einfach alle Daten über unsere
‫Anwendung mit einem einzigen API-Aufruf anzufordern.
‫Also haben wir hier eine weitere Route
‫hinzugefügt, /api, dann lesen wir die
‫Datei synchron, fügen sie in dieses Objekt ein und
‫senden dann einfach dieses Objekt als Antwort zurück,
‫aber vorher geben wir an, dass wir application/json zurücksenden, also dass der Browser
‫genau weiß, was ihn erwartet, und in den nächsten paar
‫Videos werden wir
‫tatsächlich mit dem Erstellen der Benutzeroberfläche beginnen,
‫also ist das der aufregendste Teil, oder?