Node.js für Anfänger

Die ereignisgesteuerte Programmierung kann für Anfänger überwältigend sein, was Node.js schwer machen kann. Aber lass dich nicht entmutigen; In diesem Artikel werde ich Ihnen einige Grundlagen von Node.js zeigen und erklären, warum es so populär geworden ist.

Wenn Sie Hilfe benötigen, können Sie sich jederzeit an einen der JavaScript-Experten von Envato Studio wenden. Unabhängig davon, ob Sie einen Fehler behoben oder eine neue Funktion hinzugefügt haben, finden Sie einen erfahrenen JavaScript-Entwickler, der Ihnen dabei hilft.

Lernen Sie JavaScript: Das komplette Handbuch

Wir haben ein umfassendes Handbuch zusammengestellt, mit dessen Hilfe Sie JavaScript erlernen können, egal ob Sie gerade erst als Web-Entwickler anfangen oder sich mit fortgeschrittenen Themen befassen möchten.

Einführung

Um mit der Verwendung von Node.js beginnen zu können, müssen Sie zunächst die Unterschiede zwischen Node.js und traditionellen serverseitigen Skriptumgebungen (z. B. PHP, Python, Ruby usw.) verstehen..

Asynchrone Programmierung

Node.js verwendet eine Modularchitektur, um die Erstellung komplexer Anwendungen zu vereinfachen.

Die Chancen stehen gut, dass Sie mit der asynchronen Programmierung vertraut sind. es ist immerhin das "A" in Ajax. Jede Funktion in Node.js ist asynchron. Daher wird alles, was normalerweise den Thread blockiert, im Hintergrund ausgeführt. Dies ist das Wichtigste an Node.js. Wenn Sie beispielsweise eine Datei im Dateisystem lesen, müssen Sie eine Rückruffunktion angeben, die ausgeführt wird, wenn der Lesevorgang abgeschlossen ist.

Du machst alles!

Node.js ist nur eine Umgebung - was bedeutet, dass Sie alles selbst machen müssen. Es gibt keinen Standard-HTTP-Server oder keinen Server für diese Angelegenheit. Dies kann für neue Benutzer überwältigend sein, aber die Auszahlung ist eine leistungsstarke Web-App. Ein Skript übernimmt die gesamte Kommunikation mit den Clients. Dies reduziert die Anzahl der von der Anwendung verwendeten Ressourcen erheblich. Hier ist zum Beispiel der Code für eine einfache Node.js-Anwendung:

var i, a, b, c, max; max = 1000000000; var d = Date.now (); für (i = 0; i < max; i++)  a = 1234 + 5678 + i; b = 1234 * 5678 + i; c = 1234 / 2 + i;  console.log(Date.now() - d);

Und hier ist das Äquivalent in PHP geschrieben:

$ a = null; $ b = null; $ c = null; $ i = null; $ max = 1000000000; $ start = microtime (true); für ($ i = 0; $ i < $max; $i++)  $a = 1234 + 5678 + $i; $b = 1234 * 5678 + $i; $c = 1234 / 2 + $i;  var_dump(microtime(true) - $start);

Betrachten wir nun die Benchmark-Zahlen. In der folgenden Tabelle sind die Antwortzeiten in Millisekunden für diese zwei einfachen Anwendungen aufgeführt:

Anzahl der Iterationen Node.js PHP
100 2,00 0,14
10'000 3,00 10.53
1'000'000 15.00 1119.24
10'000'000 143.00 10621.46
1'000'000'000 11118.00 1036272.19

Ich habe die beiden Apps über die Befehlszeile ausgeführt, sodass kein Server die Ausführung der Apps verzögern würde. Ich habe jeden Test zehnmal durchgeführt und die Ergebnisse gemittelt. PHP ist mit einer geringeren Anzahl von Iterationen merklich schneller, aber dieser Vorteil löst sich schnell auf, wenn die Anzahl der Iterationen zunimmt. Alles in allem ist PHP 93% langsamer als Node.js!

Node.js ist schnell, aber Sie müssen einige Dinge lernen, um sie richtig einsetzen zu können.

Module

Node.js verwendet eine Modularchitektur, um die Erstellung komplexer Anwendungen zu vereinfachen. Module ähneln Bibliotheken in C oder Einheiten in Pascal. Jedes Modul enthält eine Reihe von Funktionen, die sich auf das "Thema" des Moduls beziehen. Zum Beispiel die http Das Modul enthält spezifische Funktionen für HTTP. Node.js enthält einige Kernmodule, die Ihnen den Zugriff auf Dateien im Dateisystem, das Erstellen von HTTP- und TCP / UDP-Servern sowie die Ausführung anderer nützlicher Funktionen erleichtern.

Ein Modul aufzunehmen ist einfach; Rufen Sie einfach an benötigen() Funktion wie folgt:

var http = erfordern ('http');

Node.js ist nur eine Umgebung; du musst alles selbst machen.

Das benötigen() Funktion gibt den Verweis auf das angegebene Modul zurück. Im Falle dieses Codes ein Verweis auf die http Modul ist im gespeichert http Variable.

Im obigen Code haben wir den Namen eines Moduls an den übergeben benötigen() Funktion. Dies führt dazu, dass Node nach a sucht Knotenmodule Ordner in unserem Anwendungsverzeichnis und suchen Sie nach dem Ordner http Modul in diesem Ordner. Wenn Node das nicht findet Knotenmodule Ordner (oder die http Modul), durchläuft es dann den globalen Modulcache. Sie können auch eine tatsächliche Datei angeben, indem Sie einen relativen oder absoluten Pfad angeben, z.

var myModule = required ('./ myModule.js');

Module sind gekapselte Codeteile. Der Code innerhalb eines Moduls ist meistens privat, was bedeutet, dass die darin definierten Funktionen und Variablen nur von innerhalb des Moduls aus zugänglich sind. Sie können jedoch Funktionen und / oder Variablen verfügbar machen, die außerhalb des Moduls verwendet werden sollen. Verwenden Sie dazu die Exporte object und füllt seine Eigenschaften und Methoden mit den Codeteilen, die Sie anzeigen möchten. Betrachten Sie das folgende Modul als Beispiel:

var PI = Math.PI; exports.area = function (r) return PI * r * r; ; exports.circumference = Funktion (r) return 2 * PI * r; ;

Dieser Code erstellt eine PI Variable, auf die nur durch im Modul enthaltenen Code zugegriffen werden kann; Es ist nicht außerhalb des Moduls zugänglich. Als nächstes werden zwei Funktionen auf der erstellt Exporte Objekt. Diese Funktionen sind außerhalb des Moduls zugänglich, da sie auf der definiert sind Exporte Objekt. Als Ergebnis, PI ist vollständig vor äußeren Einflüssen geschützt. Deshalb können Sie sich darauf verlassen Bereich() und Umfang() wird sich immer so verhalten, wie sie sollen (solange ein Wert für das angegeben wird) r Parameter).

Globaler Geltungsbereich

Node ist eine JavaScript-Umgebung, die in der V8-JavaScript-Engine von Google ausgeführt wird. Daher sollten wir uns an die Best Practices halten, die wir für die clientseitige Entwicklung verwenden. Wir sollten beispielsweise vermeiden, irgendetwas in den globalen Geltungsbereich zu bringen. Das ist jedoch nicht immer möglich. Der globale Bereich in Node ist GLOBAL (im Gegensatz zu Fenster im Browser), und Sie können leicht eine globale Funktionsvariable erstellen, indem Sie die var Stichwort wie folgt:

globalVariable = 1; globalFunction = function () …;

Auch hier sollten Globals möglichst vermieden werden. Seien Sie also vorsichtig und denken Sie daran, es zu benutzen var beim Deklarieren einer Variablen.

Installation

Natürlich müssen wir Node installieren, bevor wir eine App schreiben und ausführen können. Die Installation ist einfach, wenn Sie Windows oder OS X verwenden. Die Website von nodejs.org bietet Installationsprogramme für diese Betriebssysteme. Verwenden Sie unter Linux einen beliebigen Paketmanager. Öffnen Sie Ihr Terminal und geben Sie Folgendes ein:

sudo apt-get update Der Knoten für die Installation von sudo apt-get

oder:

sudo aptitude update Der Knoten für die Installation von sudo aptitude

Node.js befindet sich in Sid-Repositories. Sie müssen sie möglicherweise zu Ihrer Quellenliste hinzufügen:

sudo echo deb http://ftp.us.debian.org/debian/ sid main> /etc/apt/sources.list.d/sid.list

Beachten Sie jedoch, dass die Installation von Sid-Paketen auf älteren Systemen das System beschädigen kann. Seien Sie vorsichtig und entfernen Sie sie /etc/apt/sources.list.d/sid.list Nachdem Sie die Installation von Node abgeschlossen haben.

Neue Module installieren

Node.js verfügt über einen Paketmanager namens Node Package Manager (NPM). Es wird automatisch mit Node.js installiert, und Sie verwenden NPM, um neue Module zu installieren. Um ein Modul zu installieren, öffnen Sie Ihr Terminal / Ihre Befehlszeile, navigieren Sie zum gewünschten Ordner und führen Sie den folgenden Befehl aus:

npm install modulname

Es ist egal, welches Betriebssystem Sie haben; Der obige Befehl installiert das von Ihnen angegebene Modul Modulname.

Die Hello World App

Natürlich wird unser erstes Node.js-Skript den Text drucken 'Hallo Welt!' zur Konsole. Erstellen Sie eine Datei, die aufgerufen wird hallo.js, und geben Sie den folgenden Code ein:

console.log ('Hallo Welt!');

Lassen Sie uns nun das Skript ausführen. Öffnen Sie die Terminal- / Befehlszeile und navigieren Sie zu dem Ordner, der enthält hallo.js, und führen Sie den folgenden Befehl aus:

Knoten hello.js

Das solltest du sehen 'Hallo Welt!' in der Konsole angezeigt.

HTTP-Server

Lassen Sie uns zu einer fortgeschritteneren Anwendung übergehen. Es ist nicht so kompliziert, wie Sie vielleicht denken. Beginnen wir mit dem folgenden Code. Lesen Sie die Kommentare und dann die Erklärung unten:

// Include http-Modul var http = erfordern ("http"); // Server erstellen Die als Parameter übergebene Funktion wird bei jeder angeforderten Anforderung aufgerufen. // Anforderungsvariable enthält alle Anforderungsparameter // Mit der Antwortvariablen können Sie alles tun, wenn die Antwort an den Client gesendet wird. http.createServer (Funktion (Anfrage, Antwort) // Listener beim Endereignis anhängen. // Dieses Ereignis wird aufgerufen, wenn der Client alle Daten gesendet hat und auf Antwort wartet. request.on ("end", function () // Schreibe Header in die Antwort: // 200 ist HTTP-Statuscode (dies bedeutet Erfolg) // Zweiter Parameter enthält Header-Felder im Objekt // Wir senden Klartext, daher sollte Content-Type text / plain response.writeHead sein (200 , 'Content-Type': 'text / plain'); // Daten senden und Antwort beenden. Response.end ('Hello HTTP!');;) // Abhören des 8080-Ports.) (8080);

Dieser Code ist sehr einfach. Sie können weitere Daten mit dem Client an den Client senden response.write () Methode, aber Sie müssen es vor dem Aufruf aufrufen response.end (). Speichern Sie diesen Code als http.js und geben Sie dies in Ihre Konsole ein:

Knoten http.js

Öffnen Sie Ihren Browser und navigieren Sie zu http: // localhost: 8080. Sie sollten den Text "Hallo HTTP!" auf der Seite.

Umgang mit URL-Parametern

Wie bereits erwähnt, müssen wir in Node alles selbst erledigen, einschließlich der Analyse von Anforderungsargumenten. Dies ist jedoch ziemlich einfach. Schauen Sie sich den folgenden Code an:

// Include http-Modul, var http = required ("http"), // und URL-Modul, was beim Analysieren von Anforderungsparametern sehr hilfreich ist. URL = Anfordern ("URL"); // Server erstellen http.createServer (Funktion (Anforderung, Antwort) // Listener beim Endereignis anhängen. request.on ('end', function () // Die Anforderung nach Argumenten parsen und in der Variablen _get speichern. // Diese Funktion analysiert Die URL von request und gibt die Objektdarstellung zurück. var _get = url.parse (request.url, true) .query; // Schreibe Header in die Antwort response.writeHead (200, 'Content-Type': 'text / plain '); // Daten senden und Antwort beenden. Response.end (' Hier sind Ihre Daten: '+ _get [' data ']);); // Listen Sie den 8080-Port an.). Listen (8080) ;

Dieser Code verwendet die parse () Methode der url module, ein Kernmodul Node.js, um die URL der Anforderung in ein Objekt zu konvertieren. Das zurückgegebene Objekt hat eine Abfrage Eigenschaft, die die Parameter der URL abruft. Speichern Sie diese Datei als get.js und führen Sie es mit dem folgenden Befehl aus:

Knoten get.js

Navigieren Sie dann zu http: // localhost: 8080 /? data = put_some_text_here in Ihrem Browser Natürlich den Wert von ändern Daten Parameter wird das Skript nicht beschädigen.

Dateien lesen und schreiben

Um Dateien in Node zu verwalten, verwenden wir die fs Modul (ein Kernmodul). Wir lesen und schreiben Dateien mit der fs.readFile () und fs.writeFile () jeweils Methoden. Ich werde die Argumente nach dem folgenden Code erklären:

// Include http-Modul, var http = required ("http"), // und MySQL-Modul, das Sie gerade installiert haben. fs = erfordern ("fs"); // Erstellen Sie den http-Server. http.createServer (Funktion (Anforderung, Antwort) // Listener beim Endereignis anhängen. request.on ("end", function () // Datei lesen. fs.readFile ("test.txt", 'utf- 8 'Funktion (Fehler, Daten) // Schreibe Header. Response.writeHead (200, ' Content-Type ':' text / plain '); // Inkrementiere die aus Datei erhaltene Nummer. Data = parseInt (data ) + 1; // Schreibe die inkrementierte Nummer in die Datei. Fs.writeFile ('test.txt', data); // Antwort mit einer schönen Nachricht beenden. Response.end ('Diese Seite wurde aktualisiert' + data + 'mal! '););); // Listen Sie den Port 8080 an.). Listen (8080);

Node.js verfügt über einen Paketmanager namens Node Package Manager (NPM). Es wird automatisch mit Node.js installiert

Speichern Sie dies als files.js. Erstellen Sie vor dem Ausführen dieses Skripts eine Datei mit dem Namen test.txt im selben Verzeichnis wie files.js.

Dieser Code demonstriert die fs.readFile () und fs.writeFile () Methoden. Jedes Mal, wenn der Server eine Anforderung erhält, liest das Skript eine Nummer aus der Datei, erhöht die Nummer und schreibt die neue Nummer in die Datei. Das fs.readFile () Die Methode akzeptiert drei Argumente: den Namen der zu lesenden Datei, die erwartete Kodierung und die Rückruffunktion.

Das Schreiben in die Datei ist zumindest in diesem Fall viel einfacher. Wir müssen nicht auf Ergebnisse warten, obwohl Sie in einer realen Anwendung nach Fehlern suchen würden. Das fs.writeFile () Die Methode akzeptiert den Dateinamen und die Daten als Argumente. Es akzeptiert auch dritte und vierte Argumente (beide sind optional), um die Kodierungs- bzw. die Rückruffunktion anzugeben.

Lassen Sie uns nun dieses Skript mit dem folgenden Befehl ausführen:

Knoten files.js

Öffne es im Browser (http: // localhost: 8080) und ein paar Mal auffrischen. Nun denken Sie vielleicht, dass der Code fehlerhaft ist, weil er sich um zwei zu erhöhen scheint. Das ist kein Fehler. Jedes Mal, wenn Sie diese URL anfordern, werden zwei Anforderungen an den Server gesendet. Die erste Anfrage wird automatisch vom Browser gestellt, der sie anfordert favicon.ico, und natürlich ist die zweite Anfrage die URL (http: // localhost: 8080).

Obwohl dieses Verhalten technisch kein Fehler ist, wollen wir dieses Verhalten nicht. Wir können dies leicht beheben, indem Sie die Anforderungs-URL überprüfen. Hier ist der überarbeitete Code:

// Include http-Modul, var http = required ("http"), // und MySQL-Modul, das Sie gerade installiert haben. fs = erfordern ("fs"); // Erstellen Sie den http-Server. http.createServer (Funktion (Anforderung, Antwort) // Listener beim Endereignis anhängen. request.on ('end', function () // Prüfen, ob Benutzer / if anfordert (request.url == '/')  // Lesen Sie die Datei. Fs.readFile ('test.txt', 'utf-8', Funktion (Fehler, Daten) // Schreibe Header. Response.writeHead (200, 'Content-Type': 'text / plain '); // Inkrementiere die aus Datei erhaltene Daten. data = parseInt (data) + 1; // Schreibe die inkrementierte Nummer in die Datei. fs.writeFile (' test.txt ', data); // Antwort mit einigen beenden nice message. response.end ('Diese Seite wurde aktualisiert' + data + 'times!');); else // Gibt an, dass die angeforderte Datei nicht gefunden wurde. response.writeHead (404); // Und die Anforderung beenden Ohne das Senden von Daten. response.end ();;) // Hören Sie den 8080-Port ab.). listen (8080);

Testen Sie es jetzt. es sollte wie erwartet funktionieren.

Zugriff auf MySQL-Datenbanken

Die meisten traditionellen serverseitigen Technologien verfügen über integrierte Methoden zum Herstellen einer Verbindung mit einer Datenbank und zum Abfragen einer Datenbank. Mit Node.js müssen Sie eine Bibliothek installieren. Für dieses Tutorial habe ich den stabilen und einfach zu verwendenden ausgewählt node-mysql. Der vollständige Name dieses Moduls lautet [email protected] (alles nach dem @ ist die Versionsnummer). Öffnen Sie Ihre Konsole, navigieren Sie zu dem Verzeichnis, in dem Sie Ihre Skripts gespeichert haben, und führen Sie den folgenden Befehl aus:

npm install [email protected]

Dadurch wird das Modul heruntergeladen und installiert, und es wird auch das Modul erstellt Knotenmodule Ordner im aktuellen Verzeichnis. Nun schauen wir uns an, wie wir dies in unserem Code verwenden können. siehe folgendes Beispiel:

// Include http-Modul, var http = required ('http'), // und MySQL-Modul, das Sie gerade installiert haben. mysql = required ("mysql"); // Verbindung herstellen // Die Daten sind standardmäßig für die neue Installation von MySQL und sollten entsprechend Ihrer Konfiguration geändert werden. var connection = mysql.createConnection (user: "root", Kennwort: "", Datenbank: "Datenbankname"); // Erstellen Sie den http-Server. http.createServer (Funktion (Anforderung, Antwort) // Listener an Endereignis anhängen. request.on ('end', function () // Datenbank abfragen. connection.query ('SELECT * FROM your_table;', Funktion (Fehler, Zeilen, Felder) response.writeHead (200, 'Content-Type': 'x-application / json'); // Daten als JSON-String senden. // Zeilenvariable enthält das Ergebnis der Abfrage. response.end (JSON.stringify (Zeilen)););); // Listen Sie den 8080-Port an.). listen (8080);

Das Abfragen der Datenbank mit dieser Bibliothek ist einfach. Geben Sie einfach die Abfragezeichenfolge und die Rückruffunktion ein. In einer realen Anwendung sollten Sie prüfen, ob Fehler aufgetreten sind Error Parameter wird nicht sein nicht definiert wenn Fehler aufgetreten sind) und Antwortcodes senden, die vom Erfolg oder Misserfolg der Abfrage abhängig sind. Beachten Sie auch, dass wir das eingestellt haben Inhaltstyp zu x-application / json, Dies ist der gültige MIME-Typ für JSON. Das Reihen Der Parameter enthält das Ergebnis der Abfrage und wir konvertieren die Daten einfach in Reihen in eine JSON-Struktur mit der JSON.stringify () Methode.

Speichern Sie diese Datei als mysql.js, und führen Sie es aus (falls Sie MySQL installiert haben):

Knoten mysql.js

Navigiere zu http: // localhost: 8080 Sie sollten in Ihrem Browser aufgefordert werden, die JSON-formatierte Datei herunterzuladen.

Fazit

Jede Funktion in Node.js ist asynchron.

Node.js erfordert zusätzliche Arbeit, aber die Auszahlung einer schnellen und robusten Anwendung lohnt sich. Wenn Sie nicht alles auf der untersten Ebene tun möchten, können Sie immer ein Framework auswählen, z. B.> Express, um die Entwicklung von Anwendungen zu erleichtern.

Node.js ist eine vielversprechende Technologie und eine ausgezeichnete Wahl für eine Anwendung mit hoher Last. Es wurde von Unternehmen wie Microsoft, eBay und Yahoo bewiesen. Wenn Sie sich beim Hosten Ihrer Website / Anwendung nicht sicher sind, können Sie immer eine günstige VPS-Lösung oder verschiedene Cloud-basierte Dienste wie Microsoft Azure und Amazon EC2 verwenden. Beide Dienste bieten skalierbare Umgebungen zu einem vernünftigen Preis.

Vergessen Sie nicht zu kommentieren, wenn Sie Fragen haben!