Node.js Schritt für Schritt Einführung

Node.js ist eine erstaunliche neue Technologie, aber wenn Sie nicht gerade ein JavaScript-Entwickler sind, kann der Prozess des Kennenlernens schnell etwas überwältigend werden. Aber deshalb sind wir hier! Wenn du möchtest Ja wirklich Wenn Sie lernen, wie Sie Node.js verwenden, werden diese Artikel und Screencasts dazu beitragen.


Eine Einführung in Node.js


Screencast Transcript

Hallo Leute, ich heiße Christopher Roach und werde Sie in dieser Serie von Screencasts auf Node.js begleiten. In dieser Serie erstellen wir mit Node eine einfache Blog-Engine, wie sie im populären Ruby on Rails-Einführungsvideo berühmt wurde. Das Ziel dieser Serie besteht darin, Ihnen, dem Betrachter, ein echtes Gefühl für die Funktionsweise von Node zu vermitteln, sodass Sie sich selbst bei der Arbeit mit beliebten Web-Entwicklungs-Frameworks wie Express oder Getty mit dem Gefühl zufrieden fühlen werden die inneren Funktionen des Knotens, um in der Lage zu sein, in seine Quelle zu fallen und Änderungen vorzunehmen, um Ihren Bedürfnissen bei Bedarf zu entsprechen.


Installation

Bevor wir uns mit den Einzelheiten des Knotens auseinandersetzen und warum Sie ihn verwenden möchten, möchte ich mit der Installation von Node beginnen, da dies zwar sehr einfach sein kann, jedoch einige Zeit in Anspruch nehmen kann.

Node ist noch sehr jung und befindet sich in aktiver Entwicklung. Daher empfiehlt es sich, die Installation von der Quelle aus vorzunehmen.

Node ist noch sehr jung und befindet sich in aktiver Entwicklung. Daher empfiehlt es sich, die Installation von der Quelle aus vorzunehmen. Das heißt, Node hat sehr wenige Abhängigkeiten, und daher ist die Kompilierung bei weitem nicht so kompliziert wie andere Projekte, mit denen Sie in der Vergangenheit gekämpft haben. Den Code erhalten Sie auf der Website Node.js. Wenn Sie auf der Seite zum Download-Bereich scrollen, finden Sie einige Optionen. Wenn Sie Git installiert haben, können Sie das Repository klonen und von dort aus installieren. Ansonsten gibt es einen Link zu einem Tarball, den Sie stattdessen herunterladen können. In diesem Video halte ich die Dinge einfach und installiere sie aus dem Tarball.

Während des Herunterladens ist jetzt ein guter Zeitpunkt zu erwähnen, dass die Bemühungen um die Bereitstellung eines Ports für Node für Windows fortgesetzt werden. Außerdem gibt es Anweisungen für die Installation unter Windows für Cygwin oder MinGW. Ich glaube, es gibt sogar einige Binärpakete, aus denen Sie installieren können, aber zum Zeitpunkt der Erstellung dieses Dokuments besteht die primäre Umgebung aus Unix- und Linux-basierten Plattformen. Wenn Sie sich auf einem Windows-Computer befinden, können Sie auf den Link klicken, um Anweisungen zum Erstellen zu erhalten und den Anweisungen für eine Windows-Installation zu folgen. Sie können auch eine Linux-Version wie Ubuntu installieren und Node dort installieren.

Wenn der Download abgeschlossen ist, entpacken Sie das Paket einfach mit und entpacken Sie es mit tar -xvf und CD in das erstellte Verzeichnis. Zuerst müssen wir ein tun ./konfigurieren, dann machen, und schlussendlich installiere. Es wird etwas Zeit brauchen, um zu bauen, also lasse ich das im Hintergrund laufen und nutze die Gelegenheit, um etwas mehr über Node zu sprechen und warum es in der Webentwicklungsgemeinschaft so viel Aufsehen erregt.


Einführung in den Knoten

Knoten ist JavaScript auf dem Server.

Wenn es sich bei diesem Artikel und diesem Video um Ihre erste Einführung in Node handelt, fragen Sie sich wahrscheinlich, was es ist und was es wert ist zu lernen, wenn es bereits so viele andere Webentwicklungs-Frameworks gibt, aus denen Sie wählen können. Nun, für den Anfang ist es wichtig, dass Node JavaScript auf dem Server ist, und seien wir ehrlich: Wenn Sie im Web arbeiten, es lieben oder hassen, müssen Sie irgendwann mit JavaScript arbeiten . Die Verwendung von JavaScript als Backend-Sprache sowie für die Client-Seite bedeutet viel weniger Kontextwechsel für Ihr Gehirn.

Oh, ich weiß, was Sie denken: "Node ist also JavaScript auf dem Server. Das ist großartig, aber es gab in der Vergangenheit andere JavaScript-Versuche, die im Grunde nur verwirrt waren."

Was unterscheidet Node vom Rest??

Nun, die kurze Antwort lautet: Knoten ist serverseitiges JavaScript, das endlich richtig gemacht wurde. Wo andere Versuche im Grunde nur Ports traditioneller MVC-Web-Frameworks für die JavaScript-Sprache waren, ist Node etwas völlig anderes. Der Website zufolge ist Node E / A für V8 JavaScript, aber was bedeutet das genau? Beginnen wir mit V8.

V8 ist die superschnelle JavaScript-Implementierung von Google, die in ihrem Chrome-Browser verwendet wird.

Durch eine wirklich raffinierte Anwendung der Just-in-Time-Kompilierung kann V8 JavaScript-Geschwindigkeiten erreichen, die Benutzer anderer dynamischer Sprachen wie Python und Ruby vor Neid erblassen lassen. Werfen Sie einen Blick auf einige der Benchmarks und ich glaube, Sie werden begeistert sein. V8 JavaScript ist mit vielen JVM-basierten Sprachen wie Clojure und Java und kompilierten Sprachen wie Go in vielen Fällen verfügbar.

Die Möglichkeit von JavaScript, Schließungen zu umgehen, macht ereignisbasierte Programmierung einfach.

Die andere Schlüsselphrase in dieser Anweisung ist Ereignis-E / A. Dies ist der Biggie. Wenn Sie einen Webserver erstellen, haben Sie grundsätzlich zwei Möglichkeiten, wenn Sie mehrere gleichzeitige Verbindungsanfragen bearbeiten. Der erste Weg, der traditionellere Weg von Webservern wie Apache ist, besteht in der Verwendung von Threads, um eingehende Verbindungsanforderungen zu verarbeiten. Die andere Methode, die von Node und einigen extrem schnellen, modernen Servern wie Nginx und Thin verwendet wird, ist die Verwendung eines einzelnen nicht blockierenden Threads mit einer Ereignisschleife. Dies ist der Punkt, an dem die Entscheidung für die Verwendung von JavaScript wirklich ausschlaggebend ist, da JavaScript für die Verwendung in einer einzigen Thread-basierten Ereignisschleifenumgebung entwickelt wurde: dem Browser. Die Möglichkeit von JavaScript, Schließungen zu umgehen, macht ereignisbasierte Programmierung zum Kinderspiel. Im Grunde rufen Sie einfach eine Funktion auf, um eine Art E / A auszuführen und eine Rückruffunktion zu übergeben, und JavaScript erstellt automatisch eine Schließung. Dabei wird sichergestellt, dass der korrekte Status erhalten bleibt, auch wenn die aufrufende Funktion längst nicht mehr im Gültigkeitsbereich ist. Aber das ist alles nur technischer Jargon und ich bin mir sicher, dass Sie unbedingt Code in Aktion sehen werden. Ich werde bis zum Ende dieser Installation einen schnellen Vorlauf machen, damit wir mit unserer brandneuen, frisch geprägten Version von Node herumspielen können.


Bestätigung der Installation

Es sieht also so aus, als wäre mein Build endlich fertig; Ich möchte schnell überprüfen und sicherstellen, dass alles gut mit der Installation lief. Dazu einfach laufen Knoten - Version von der Befehlszeile aus, und Sie sollten einen Hinweis darauf sehen, dass Sie die neueste Version von Node ausführen, die derzeit Version 0.4.5 ist. Wenn Sie eine gedruckte Version sehen, können Sie sich darauf verlassen, dass alles gut gelaufen ist und Sie Ihre erste Node-App schreiben können. Also lass uns CD zurück in unser Home-Verzeichnis und erstellen Sie einen neuen Ordner, in dem Sie all unsere Arbeit während dieser Serie von Screencasts speichern können. Hier werde ich einfach meine nennenBlog'und lass uns CD in das, um loszulegen.


Node - Das Server-Framework

Im Gegensatz zu anderen Frameworks ist Node nicht unbedingt für die Webentwicklung gedacht. Tatsächlich können Sie sich Node als Rahmen für die Serverentwicklung jeglicher Art vorstellen. Mit Node können Sie einen IRC-Server, einen Chat-Server oder, wie wir in diesen Tutorials sehen, einen http-Server erstellen. Da wir kein Einführungs-Tutorial haben können, ohne das obligatorischeHallo Welt'Anwendung, wir fangen damit an.


Hallo Welt

Erstellen wir eine neue Datei mit dem Namen app.js. Node enthält jetzt eine Handvoll Bibliotheken, um die Entwicklung ereignisbasierter Server zu vereinfachen. Um eine der verfügbaren Bibliotheken zu verwenden, fügen Sie das entsprechende Modul einfach mit der Funktion „required“ hinzu. Die Anforderungsfunktion gibt ein Objekt zurück, das das von Ihnen übergebene Modul darstellt, und Sie können dieses Objekt in einer Variablen erfassen. Dadurch wird effektiv ein Namespace für die Funktionalität jedes erforderlichen Moduls erstellt. Für die Erstellung eines HTTP-Servers stellt Node die http-Bibliothek bereit. Lassen Sie uns also fortfahren und das jetzt anfordern und das zurückgegebene Objekt der http-Variablen zuweisen.

Als Nächstes müssen wir unseren Server erstellen. Die http-Bibliothek stellt eine aufgerufene Funktion bereit createServer Das nimmt eine Rückruffunktion und gibt ein neues Serverobjekt zurück.

Die Callback-Funktion nennt der Knoten eine Listener-Funktion. Er wird vom Server immer dann aufgerufen, wenn eine neue Anforderung eingeht.

Bei jeder HTTP-Anforderung wird die Listener-Funktion aufgerufen, und Objekte, die die HTTP-Anforderung und die Antwort darstellen, werden an die Funktion übergeben. Das Antwortobjekt innerhalb unserer Listener-Funktion kann dann verwendet werden, um eine Antwort an den Browser zurückzusenden. Dazu müssen wir zuerst die entsprechenden HTTP-Header schreiben. Rufen wir also die Schreibkopf Funktion auf unserem Antwortobjekt.

Das Schreibkopf Funktion braucht ein paar Argumente. Der erste ist ein ganzzahliger Wert, der den Statuscode der Anforderung darstellt, der für uns 200 sein wird, mit anderen Worten, OK. Der zweite Wert ist ein Objekt, das alle Antwortheader enthält, die wir festlegen möchten. In diesem Beispiel setzen wir einfach den Content-Typ auf 'text / plain', um Klartext zurückzusenden.

Sobald wir die Header festgelegt haben, können wir die Daten senden. Dazu rufen Sie die an schreiben Funktion und übergeben Sie die Daten, die Sie senden möchten. Lassen Sie uns hier anrufen schreiben Funktion auf unserem Antwortobjekt und übergeben Sie den String "Hallo Welt".

Um die Antwort tatsächlich zu senden, müssen wir dem Server signalisieren, dass wir mit dem Schreiben unserer Antwort fertig sind. wir können das tun, indem wir anrufen Antwort.Ende. Das Ende Mit function können wir auch Daten übergeben, sodass wir unseren Server-Code verkürzen können, indem wir den Aufruf der zuvor erstellten Schreibfunktion loswerden und stattdessen die Zeichenfolge "übergeben".Hallo Welt"bis zum Ende funktionieren, so.

Nachdem wir unseren Server erstellt haben, müssen wir ihn so einrichten, dass er auf neue Anfragen wartet. Das ist leicht genug: Rufen Sie die Listening-Funktion unseres Serverobjekts auf und geben Sie eine Portnummer für das Abhören ein. in diesem Fall benutze ich port 8000. Die Listening-Funktion benötigt auch einen optionalen zweiten Parameter, den Hostnamen-URL. Da wir dies jedoch nur lokal ausführen, können wir diesen Parameter vorerst überspringen.

Lassen Sie uns zum Schluss eine Nachricht ausdrucken, um uns mitzuteilen, dass unser Server ausgeführt wird und an welchem ​​Port er auf neue Anforderungen wartet. Sie können das tun, indem Sie anrufen console.log, genau wie wir es im Browser tun würden, und den String übergeben "Hören auf http://127.0.0.1:8000"Nun geht es los, jetzt führen wir unsere App aus, indem wir knoten aufrufen und den Namen der Datei übergeben, die er ausführen soll.


DIE REPL

Bevor wir diesen ersten Artikel und das erste Video dieser Serie zum Abschluss bringen, kehren wir zum Terminal zurück und werfen einen Blick auf NPLES REPL.

Eine REPL steht für diejenigen, die mit dem Akronym nicht vertraut sind, für Read-Eval-Print-Loop. Dies ist nichts anderes als ein einfaches Programm, das Befehle entgegennimmt, sie auswertet und ihre Ergebnisse ausgibt.

Es ist im Wesentlichen eine interaktive Eingabeaufforderung, mit der Sie so ziemlich alles tun können, was Sie mit regulärem Knoten tun können, aber ohne den zusätzlichen Aufwand für das Erstellen einer separaten Datei ein bisschen mehr über Node.

Wir müssen zuerst unsere Server-Anwendung durch Drücken von stoppen Strg-C. Führen Sie dann node erneut aus, diesmal jedoch ohne Dateinamen. Wenn Sie einen Knoten ohne Argumente ausführen, wird die REPL aufgerufen, wie Sie hier an der Änderung der Eingabeaufforderung erkennen können. Die REPL ist sehr einfach: Grundsätzlich können Sie JavaScript-Code schreiben und die Bewertung dieses Codes anzeigen. Trotz der Einfachheit verfügt die REPL jedoch über einige Befehle, die sich als nützlich erweisen können. Sie können sich jeden dieser Befehle ansehen, indem Sie den Befehl .help an der Eingabeaufforderung aufrufen. Hier (siehe Screencast) sehen wir eine Liste von vier Befehlen, von denen der erste der ist .brechen Befehl. Wenn Sie Code schreiben, der sich über mehrere Zeilen erstreckt, und Sie feststellen, dass Sie einen Fehler gemacht haben und aus irgendeinem Grund ausbrechen müssen, müssen Sie die .brechen Befehl kann dazu verwendet werden. Lass es uns jetzt ausprobieren?

Ich werde hier eine Funktion erstellen und ich werde sie einfach anrufen foo und öffnen Sie den Funktionskörper und drücken Sie dann eingeben. Beachten Sie, dass wir in der nächsten Zeile, anstatt das typische Größer-als-Symbol zu sehen, jetzt einen Satz von drei Punkten oder eine Ellipse sehen. Auf diese Weise zeigt Node uns an, dass wir den Befehl in der vorherigen Zeile noch nicht abgeschlossen haben und der Node noch mehr von uns erwartet, bevor er den von uns eingegebenen Code auswertet. Fügen wir also eine Zeile hinzu Code jetzt: Wir machen es console.log und wir drucken den Namen der Funktion aus. Lassen Sie uns nun die Eingabetaste drücken und beachten Sie erneut, dass das Ellipsenzeichen erneut angezeigt wird. Node erwartet immer noch, dass wir die Funktion irgendwann beenden. Nehmen wir jetzt an, ich habe einen Fehler gemacht und möchte nur zu einer normalen Eingabeaufforderung zurückkehren. Wenn ich die Eingabetaste weiterhin drücke, zeigt der Knoten weiterhin das Ellipsenzeichen an. Aber wenn ich das anrufe .brechen Kommando, Node bricht uns aus dem aktuellen Kommando und bringt uns zur normalen Eingabeaufforderung zurück.

Als nächstes haben wir die .klar Befehl. Dieser wird unseren aktuellen Kontext klären. Wenn Sie also die Umgebung mit der Erstellung mehrerer Variablen und Funktionen unübersichtlich gemacht haben und eine saubere Arbeitsumgebung wünschen, führen Sie einfach die .klar Kommando und Voila, alles verschwindet auf magische Weise.

.Ausfahrt und .Hilfe

Endlich gibt es die .Ausfahrt und .Hilfe Befehle. Das .Hilfe Befehl ist ziemlich offensichtlich, da es der Befehl ist, mit dem wir die Liste der Befehle an erster Stelle angezeigt haben. Das .Ausfahrt Der Befehl ist ebenso offensichtlich: Sie rufen ihn im Wesentlichen nur auf, um die REPL zu beenden.

Das deckt also praktisch alle Funktionen ab, die REPL außerhalb der Bewertung des eingegebenen Codes bietet. Bevor wir jedoch die REPL vollständig verlassen, möchte ich diese Gelegenheit nutzen, um einige Unterschiede und Gemeinsamkeiten zwischen JavaScript im Browser und der JavaScript-Variante von Node zu diskutieren. Lass uns Node noch einmal ausführen und zurück in die REPL springen.

Der erste Unterschied zwischen clientseitigem JavaScript und Node besteht darin, dass alle Funktionen oder Variablen, die außerhalb einer Funktion oder eines Objekts erstellt werden, im Browser an den globalen Gültigkeitsbereich gebunden und überall verfügbar sind. In Node trifft dies jedoch nicht zu. Jede Datei und sogar die REPL verfügt über einen eigenen Modulebenenbereich, zu dem alle globalen Deklarationen gehören. Wir werden sehen, dass dies später in der Serie zum Einsatz kommen wird, wenn wir Module besprechen und einige eigene erstellen. Im Moment können Sie jedoch das eigentliche Modulobjekt für die REPL sehen, indem Sie an der Eingabeaufforderung modul eingeben. Beachten Sie, dass ein promptes Attribut ein paar Ebenen tief in unserem Modulobjekt vergraben ist. Dies steuert die Aufforderung, die wir in der REPL sehen. Lassen Sie uns das einfach in etwas anderes ändern und sehen, was passiert. Dort haben wir jetzt einen brandneuen Prompt.

Ein weiterer Unterschied zwischen Node JavaScript und Browser JavaScript besteht darin, dass Sie im Browser über ein globales Fensterobjekt verfügen, das Sie im Wesentlichen an die Browserumgebung bindet.

In Node gibt es keinen Browser und daher auch keinen Browser Fenster Objekt. Der Knoten hat jedoch ein Gegenstück, das Sie in die Betriebsumgebung einbindet, bei der es sich um das Prozessobjekt handelt, das wir durch einfaches Eingeben des Prozesses in die REPL sehen können. Hier finden Sie einige nützliche Funktionen und Informationen wie die Liste der Umgebungsvariablen.

Eine Ähnlichkeit, die hier wichtig ist, ist die Funktion setTimeout. Wenn Sie mit clientseitigem JavaScript vertraut sind, haben Sie diese Funktion ohne Zweifel ein oder zwei Mal verwendet. Im Grunde können Sie eine Funktion einrichten, die zu einem späteren Zeitpunkt aufgerufen werden soll. Lass uns das jetzt ausprobieren.

> Funktion sayHello (Sekunden) ? console.log ("Hallo") ;? setTimeout (function () ? console.log ('World') ;?, Sekunden * 1000) ;? 

Dadurch wird eine Funktion erstellt, die beim Aufruf die Zeichenfolge "Hello" und dann einige Sekunden später die Zeichenfolge "World" ausgibt. Lassen Sie uns die Funktion jetzt ausführen, um sie in Aktion zu sehen.

> sag hallo (2);

Hier sind einige wichtige Ideen zu beachten. Erstens hat Ryan Dahl, der Schöpfer von Node, sein Bestes getan, um die Umgebung für jeden mit clientseitigen JavaScript-Erfahrungen so vertraut wie möglich zu machen. Also die Verwendung von Namen wie setTimeout und setInterval anstelle von sleep and repeat war zum Beispiel die bewusste Entscheidung, die serverseitige Umgebung an die Browserumgebung anzupassen, wo immer dies sinnvoll ist.

Das zweite Konzept, das ich Ihnen bewusst machen möchte, ist das wirklich Wichtige. Beachten Sie das, wenn wir anrufen sag Hallo, Gleich nach dem Drucken der ersten Zeichenfolge wird die Kontrolle sofort an die REPL zurückgegeben. In der Zeit zwischen dem Ausdruck der ersten Zeichenfolge und der Ausführung der Rückruffunktion können Sie an der Eingabeaufforderung von REPL alles tun, was Sie möchten. Dies liegt an der ereignisbasierten Natur des Knotens. In Node ist es nahezu unmöglich, eine Funktion aufzurufen, die aus irgendeinem Grund blockiert. Dies gilt auch für die Funktion setTimeout. Lass uns unsere anrufen sag Hallo wieder funktionieren, diesmal jedoch in einem etwas längeren Timeout-Intervall, damit wir genug Zeit haben, um ein wenig herumzuspielen und unseren Standpunkt zu beweisen. Ich glaube, 10 Sekunden sollten den Trick schaffen.

Dort sehen wir die erste Saite. Lassen Sie uns weitergehen und einen eigenen Code ausführen 2 + 2. Toll, wir sehen, dass die Antwort lautet 4 und? Jetzt wird unsere zweite Saite ausgedruckt.


Fazit

Damit sind wir am Ende der ersten Episode dieser Serie. Ich hoffe, dass dies eine ziemlich informative Einführung in Node für Sie war, und ich hoffe, dass ich es anständig getan habe, um zu erklären, warum es so aufregend ist, was es zu bieten hat und wie einfach es ist, Spaß zu haben. In der nächsten Episode werden wir tatsächlich anfangen, etwas Code für unsere Blog-Engine zu schreiben. Ich hoffe, dass Sie alle wieder zu mir kommen, wenn die Dinge ein bisschen mehr in die Hände bekommen. Bis dann!