JavaScript ist eine der beliebtesten Programmiersprachen der Welt. Es treibt heute Millionen von Webseiten an und hat Scharen von Entwicklern und Designern angezogen, um Funktionen für das Web zu erstellen. Wenn du neu in der Programmierung bist, ist JavaScript eine der besten Programmiersprachen, die du dir aneignen kannst.

In den ersten 20 Jahren wurde JavaScript hauptsächlich für Client-seitiges Scripting verwendet. Da JavaScript nur innerhalb des <script>-Tags verwendet werden konnte, mussten Entwickler in mehreren Sprachen und Frameworks zwischen den Frontend- und Backend-Komponenten arbeiten. Später kam Node.js, eine Laufzeitumgebung, die alles beinhaltet, was zur Ausführung eines in JavaScript geschriebenen Programms benötigt wird.

Node.js ist eine Single-Thread, Open Source, plattformübergreifende Laufzeitumgebung für die Erstellung von schnellen und skalierbaren serverseitigen und Netzwerkanwendungen. Es läuft auf der V8 JavaScript-Laufzeit-Engine und verwendet eine ereignisgesteuerte, nicht-blockierende I/O-Architektur, die es effizient und für Echtzeitanwendungen geeignet macht.

In was ist Node.js geschrieben?

Node.js ist in C, C++ und JavaScript geschrieben.

Wikipedia definiert Node.js als „eine paketierte Zusammenstellung von Googles V8 JavaScript-Engine, der libuv-Plattformabstraktionsschicht und einer Kernbibliothek, die selbst hauptsächlich in JavaScript geschrieben ist.“

Die Laufzeitumgebung nutzt intern Chrome V8, die JavaScript-Ausführungsengine, und es ist auch in C++ geschrieben. Dies erweitert das Repertoire von Node.js um zusätzliche Anwendungsfälle, wie z.B. den Zugriff auf interne Systemfunktionen (z.B. Netzwerk).

Die Architektur von Node.js und wie sie funktioniert

Node.js verwendet die „Single Threaded Event Loop“ Architektur, um mehrere Clients gleichzeitig zu bedienen. Um zu verstehen, wie sich dies von anderen Runtimes unterscheidet, müssen wir verstehen, wie Multi-Threaded Concurrent Clients in Sprachen wie Java gehandhabt werden.

In einem Multi-Threaded Request-Response Modell senden mehrere Clients eine Anfrage, und der Server verarbeitet jede einzelne, bevor er die Antwort zurückschickt. Es werden jedoch mehrere Threads verwendet, um gleichzeitige Aufrufe zu verarbeiten. Diese Threads werden in einem Thread-Pool definiert und jedes Mal, wenn eine Anfrage eintrifft, wird ein individueller Thread zugewiesen, um es zu bearbeiten.

Wie node.js eingehende Anfragen mit Hilfe der Ereignisschleife verarbeitet
Wie node.js eingehende Anfragen mit Hilfe der Ereignisschleife verarbeitet

Node.js arbeitet anders. Lass uns einen Blick auf jeden Schritt werfen, den es durchläuft:

  1. Node.js unterhält einen begrenzten Threadpool, um Anfragen zu bedienen.
  2. Wann immer eine Anfrage kommt, stellt Node.js sie in eine Warteschlange.
  3. Nun kommt die single-threaded „Event loop“ – die Kernkomponente – ins Spiel. Diese Ereignisschleife wartet auf unbestimmte Zeit auf Anfragen.
  4. Wenn eine Anfrage eintrifft, holt die Schleife sie aus der Warteschlange und prüft, ob sie eine blockierende Input/Output (I/O) Operation benötigt. Wenn nicht, verarbeitet sie die Anfrage und sendet eine Antwort.
  5. Wenn die Anfrage eine blockierende Operation ausführt, weist die Ereignisschleife einen Thread aus dem internen Threadpool zu, um die Anfrage zu verarbeiten. Es sind nur begrenzte interne Threads verfügbar. Diese Gruppe von Hilfsthreads wird die Workergroup genannt.
  6. Die Ereignisschleife verfolgt blockierende Anfragen und stellt sie in die Warteschlange, sobald die blockierende Aufgabe abgearbeitet ist. Auf diese Weise erhält sie ihre nicht-blockierende Natur aufrecht.

Da Node.js weniger Threads verwendet, verbraucht es weniger Ressourcen/Speicher, was zu einer schnelleren Ausführung von Aufgaben führt. Für unsere Zwecke ist diese Single-Thread-Architektur also äquivalent zur Multi-Thread-Architektur. Wenn man datenintensive Aufgaben verarbeiten muss, dann macht die Verwendung von Multi-Thread-Sprachen wie Java viel mehr Sinn. Aber für Echtzeitanwendungen ist Node.js die offensichtliche Wahl.

Eigenschaften von Node.js

Node.js ist in den letzten Jahren schnell gewachsen. Das liegt an der riesigen Liste von Features, die es bietet:

  1. Easy – Node.js ist ziemlich einfach zu bedienen. Es ist eine gute Wahl für Anfänger in der Webentwicklung. Es gibt viele Tutorials und eine große Community – der Einstieg ist sehr einfach.
  2. Skalierbar – Es bietet eine enorme Skalierbarkeit für Anwendungen. Node.js ist als Single-Thread-System in der Lage, eine große Anzahl von gleichzeitigen Verbindungen mit hohem Durchsatz zu verarbeiten.
  3. Geschwindigkeit – Die nicht-blockierende Thread-Ausführung macht Node.js noch schneller und effizienter.
  4. Pakete – Es gibt eine große Anzahl von Open Source Node.js-Paketen, die dir die Arbeit erleichtern können. Es gibt heute mehr als eine Million Pakete im NPM-Ökosystem.
  5. Starkes Backend – Node.js ist in C und C++ geschrieben, was es schnell macht und Features wie Networking Support hinzufügt.
  6. Multi-platform – Dank der plattformübergreifenden Unterstützung kannst du mit Node.js SaaS-Websites, Desktop-Apps und sogar mobile Apps erstellen.
  7. Wartbar – Node.js ist eine einfache Wahl für Entwickler, da sowohl das Frontend als auch das Backend mit JavaScript als einer einzigen Sprache verwaltet werden können.

Marktgröße

Webseiten sind in den letzten 2 Jahrzehnten immens gewachsen, und wie erwartet wächst auch Node.js schnell. Die beliebte Runtime hat bereits 2018 die 1-Milliarde-Download-Schwelle überschritten, und laut W3Techs wird Node.js von 1,2% aller Webseiten überall genutzt. Das sind insgesamt über 20 Millionen Webseiten im gesamten Internet.

Es überrascht nicht, dass es auch bei Millionen von Unternehmen eine beliebte Wahl ist. Hier sind ein paar der beliebtesten, die Node.js heute nutzen:

  • Twitter
  • Spotify
  • eBay
  • Reddit
  • LinkedIn
  • Godaddy

Anwendungen von Node.js

Anwendungen von Node.js
Anwendungen von Node.js

Node.js wird für eine Vielzahl von Anwendungen genutzt. Lass uns einige beliebte Anwendungsfälle erkunden, bei denen Node.js eine gute Wahl ist:

  1. Chats in Echtzeit – Aufgrund seiner asynchronen Single-Thread-Natur ist Node.js gut geeignet, um Echtzeit-Kommunikation zu verarbeiten. Es kann leicht skaliert werden und wird oft bei der Entwicklung von Chatbots verwendet. Node.js macht es auch einfach, zusätzliche Chat-Funktionen wie Multi-Personen-Chat und Push-Benachrichtigungen zu erstellen.
  2. Internet of Things – IoT-Anwendungen bestehen in der Regel aus mehreren Sensoren, da diese häufig kleine Datenpakete senden, die sich zu einer großen Anzahl von Anfragen anhäufen können. Node.js ist eine gute Wahl, da es in der Lage ist, diese gleichzeitigen Anfragen schnell zu verarbeiten.
  3. Daten-Streaming – Unternehmen wie Netflix nutzen Node.js für Streaming-Zwecke. Das liegt vor allem daran, dass Node.js leichtgewichtig und schnell ist, außerdem bietet Node.js eine native Streaming-API. Diese Streams ermöglichen es den Nutzern, Anfragen aneinander weiterzuleiten, was dazu führt, dass die Daten direkt an ihr Ziel gestreamt werden.
  4. Komplexe Single-Page-Applikationen (SPAs) – Bei SPAs wird die gesamte Anwendung in einer einzigen Seite geladen. Das bedeutet in der Regel, dass im Hintergrund ein paar Anfragen für bestimmte Komponenten gestellt werden. Hier kommt die Event-Schleife von Node.js zur Hilfe, da sie Anfragen nicht-blockierend verarbeitet.
  5. REST API-basierte Anwendungen – JavaScript wird sowohl im Frontend als auch im Backend von Webseiten eingesetzt. So kann ein Server mit Hilfe von Node.js einfach über REST APIs mit dem Frontend kommunizieren. Node.js stellt auch Pakete wie Express.js und Koa zur Verfügung, die es noch einfacher machen, Webanwendungen zu erstellen.

Ist Node.js eine Programmiersprache?

Mit einem Wort: nein.

Node.js ist keine Programmiersprache. Vielmehr ist es eine Laufzeitumgebung, die verwendet wird, um JavaScript außerhalb des Browsers auszuführen.

Node.js ist auch kein Framework (eine Plattform zur Entwicklung von Softwareanwendungen). Die Node.js-Laufzeitumgebung baut auf einer Programmiersprache auf – in diesem Fall JavaScript – und hilft dabei, Frameworks selbst auszuführen.

Zusammenfassend lässt sich sagen, dass Node.js weder eine Programmiersprache noch ein Framework ist; es ist eine Umgebung für sie.

Ist Node.js Frontend oder Backend?

Ein häufiger Irrglaube unter Entwicklern ist, dass Node.js ein Backend-Framework ist und nur für die Erstellung von Servern verwendet wird. Das ist nicht wahr: Node.js kann sowohl im Frontend als auch im Backend eingesetzt werden.

Einer der Gründe, warum Node.js-Frameworks eine beliebte Wahl für Entwickler sind, die ein flexibles und skalierbares Backend bauen, ist seine ereignisgesteuerte, nicht-blockierende Natur. Aber auch Frontend-Entwickler werden diese Vorteile von Node.js in ihrer eigenen Arbeit deutlich sehen.

Lass uns einen Blick darauf werfen, warum Node.js sowohl für das Backend als auch für das Frontend funktioniert:

  1. Wiederverwendbarkeit – JavaScript ist eine weit verbreitete Sprache, die verwendet wird, um sowohl Backend als auch Frontend mit Hilfe von Frameworks wie Express.js und Meteor.js zu schreiben. Einige beliebte Stacks wie MERN nutzen Express.js als Backend (ein Node.js Framework). Mehrere Komponenten können auch zwischen Frontend und Backend wiederverwendet werden.
  2. Produktivität und Entwicklereffizienz – Dank der Reduzierung des Kontextwechsels zwischen mehreren Sprachen kann viel Zeit für Entwickler eingespart werden. Die Verwendung von JavaScript sowohl für das Backend als auch für das Frontend führt zu einer erhöhten Effizienz, da viele Tools für beide gemeinsam sind.
  3. Riesige Community – Eine florierende Online-Community ist ein wichtiger Faktor für die Geschwindigkeit eines erfolgreichen Entwicklungszyklus. Wenn du mit einem Problem nicht weiterkommst, ist die Wahrscheinlichkeit groß, dass jemand es bereits gelöst und die Lösung auf Stack Overflow geteilt hat. Node.js macht sich diese Community zu Nutze, die aktiv und engagiert ist, wenn es um die beliebte Laufzeitumgebung und ihre Pakete geht.

Erste Schritte mit Node.js

Es kann überwältigend sein, zu entscheiden, wo man mit Node.js anfangen soll. Zum Glück ist es einfach zu installieren und dann kannst du es selbst ausprobieren.

Wie man Node.js installiert

Wenn du Node.js bereits installiert hast, kannst du diesen Abschnitt überspringen.

Auf macOS

Bash auf dem Mac verwenden

curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

Homebrew auf dem Mac benutzen

brew install node

Unter Windows

Lade den Windows Installer direkt von der Webseite nodejs.org herunter.

Unter Linux

Unter Ubuntu 18.04+ kannst du Node mit den folgenden Befehlen installieren.

sudo apt update
sudo apt install nodejs

Überprüfe die installierte Version von Node.js

Im vorherigen Abschnitt haben wir Node erfolgreich installiert. Überprüfen wir es, indem wir die installierte Version überprüfen. Führe den folgenden Befehl im Terminal aus.

node -v

Du kannst es auch über das längere Flag überprüfen

node --version

Du solltest eine ähnliche Ausgabe wie diese sehen. Allerdings kann die Versionsnummer variieren.

v14.16.0

Was ist NPM?

NPM ist das Paket-Ökosystem von Node.js. Es ist das größte Ökosystem aller Open Source Bibliotheken der Welt, mit über 1 Million Paketen, Tendenz steigend. NPM ist kostenlos und tausende von Open Source Entwicklern tragen täglich dazu bei.

NPM wird mit einem Kommandozeilenprogramm ausgeliefert. Du kannst einfach auf der Webseite von NPM nach dem gewünschten Paket suchen und es mit einem einzigen Befehl installieren. Du kannst auch die Versionen deiner Pakete verwalten, Abhängigkeiten überprüfen und sogar eigene Skripte in deinen Projekten mit diesem Kommandozeilenprogramm einrichten. Ohne Zweifel ist NPM der beliebteste Besitz der Node.js-Community; Node.js zieht eine große Anzahl von Entwicklern vor allem wegen seines exzellenten Package Supports an.

NPM-Pakete über CLI installieren

Wenn du Node.js installierst, wird NPM automatisch mitinstalliert. Wir haben in den vorherigen Abschnitten behandelt, wie man Node.js installiert, also lass uns jetzt einen Blick auf den Befehl werfen, um ein Paket mit NPM zu installieren:

npm install <package-name>

Ja, so einfach ist es! Du kannst sogar mehrere Pakete auf einmal installieren:

npm install <pkg-1> <pkg-2> <pkg-3>

Du kannst auch das -g (global) Flag angeben, wenn du ein Paket im globalen Kontext installieren möchtest. Dies erlaubt dir, das Paket überall auf deiner Maschine zu verwenden.

Wenn du eine neue Anwendung initialisierst, erstellt NPM automatisch eine package.json-Datei, die aus allen NPM-Paketen besteht. Hier kannst du Versionen, Abhängigkeiten und eigene Skripte angeben.

Es gibt eine lange Liste von Befehlen, die mit dem NPM-Dienstprogramm geliefert werden, darunter publish, audit, run und mehr. Mit dem Befehl npm help kannst du herausfinden, wie du diese verwenden kannst.

Node und npm Version.
Node und npm Version.

Beliebte Pakete

Hier sind einige der beliebtesten Pakete für Node.js heute:

  • Express – Express.js, oder einfach Express, ist ein von Sinatra inspiriertes Webentwicklungsframework für Node.js und der De-facto-Standard für die meisten Node.js-Anwendungen da draußen.
  • MongoDB – Der offizielle Treiber zu MongoDB. Es stellt die API für MongoDB Objektdatenbanken in Node.js zur Verfügung.
  • Socket.io – Socket ermöglicht Echtzeit, bidirektionale und ereignisbasierte Kommunikation.
  • Lodash – Lodash macht JavaScript einfacher, indem es die Arbeit mit Arrays, Zahlen, Objekten, Strings, etc. vereinfacht.
  • Moment – Eine JavaScript Datumsbibliothek zum Parsen, Validieren, Manipulieren und Formatieren von Daten.
  • Commander.js – Das ist alles, was du brauchst, um mit Kommandozeileninterfaces für node.js zu arbeiten und zu bauen.
  • Forever – Ein einfaches CLI Tool, um sicherzustellen, dass ein bestimmtes Skript kontinuierlich (d.h. für immer) läuft. Hält deinen Node.js-Prozess in der Produktion auch bei unerwarteten Ausfällen aufrecht.
  • Async – Ein Utility-Modul, das einfache, mächtige Funktionen für die Arbeit mit asynchronem JavaScript bereitstellt.
  • Redis – Eine Client-Bibliothek zur Unterstützung der Redis-Datenbankintegration.
  • Mocha – Ein sauberes, flexibles JavaScript-Testframework für Node.js und den Browser.
  • Passport – Einfache, unauffällige Authentifizierung für Node.js. Der einzige Zweck von Passport ist die Authentifizierung von Anfragen.

Hello World in Node.js

Wie immer beginnen wir mit dem grundlegenden „Hello World“-Programm, bei dem wir einen Server in Node.js erstellen, der bei einer Serveranfrage eine „Hello World“-Ausgabe zurückgibt. Bevor du loslegst, solltest du dir einen guten Texteditor zulegen.

Sobald du deinen Texteditor geöffnet hast, ist hier der Code, den du für dein „Hello World“ Programm verwenden wirst:

// server.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World! Welcome to Node.js');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Speichere diese Datei als `server.js`. Gehe nun zum Terminal und starte den Server mit dem Befehl:

node server.js

Der Server sollte jetzt starten. Um die Ausgabe zu überprüfen, öffne http://localhost:3000 in deinem Browser. Du solltest die Nachricht sehen –

Hello World! Welcome to Node.js

Erläuterung des Hello World Servers

Node.js kommt mit einem eingebauten Modul namens „HTTP“, das es Node.js ermöglicht, Daten über das HyperText Transfer Protocol (HTTP) zu übertragen.

Im obigen Code laden wir zuerst das http Modul in unser Programm. Dann verwenden wir die createServer Methode, um eine Anfrage anzunehmen und eine Antwort mit einem Statuscode zurückzugeben. Schließlich lauschen wir an einem definierten Port.

Herzlichen Glückwunsch – du hast gerade deinen ersten Server in Node.js erstellt! Im nächsten Abschnitt werden wir lernen, wie man das Express Framework benutzt, um einen Server zu erstellen.

Server mit Express erstellen

Als erstes sollten wir besprechen, was ein Server ist. Ein Server ist dafür verantwortlich, Client-Anfragen durch seine Software (meistens Apache oder Nginx) entgegenzunehmen, die erforderlichen Aufgaben auszuführen und schließlich Antworten an die Clients zurückzuschicken. Express ist ein Framework, das uns helfen wird, einen Server in Node zu erstellen.

Express.js ist ein minimales und flexibles Node.js-Webapplikations-Framework, das ein robustes Set an Funktionen für Web- und mobile Anwendungen bietet. Es ermöglicht das Hinzufügen von Route-Tabellen und das Einrichten von Middleware in deiner Anwendung. Du kannst Express mit folgendem Befehl installieren.

npm install express --save

Im vorherigen Abschnitt haben wir das eingebaute http-Dienstprogramm verwendet, um einen Server zu erstellen. Jetzt wollen wir einen „Hello World“ Server mit Express.js erstellen.

Öffne deinen Texteditor und gib diesen Code ein:


// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000

// GET callback function returns a response message
app.get(‚/‘, (req, res) => {
res.send(‚Hello World! Welcome to Node.js‘)
})

app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})

Als nächstes starten wir unseren Server mit dem folgenden Befehl.

node server-express.js

Schau dir nun http://localhost:3000 in deinem Browser an, um die „Hello World“ Ausgabe zu sehen.

Zusammenfassung

In aller Kürze ist Node.js eine populäre Programmierumgebung, die für die Erstellung von hochskalierten Anwendungen verwendet werden kann, die mehrere gleichzeitige Anfragen unterstützen müssen. Single-threaded non-blocking I/O macht es zu einer ausgezeichneten Wahl für Echtzeit- und Daten-Streaming-Anwendungen.

Um es noch besser zu machen, hat Node.js eine riesige Community von aktiven Entwicklern und verfügt über das weltweit größte Open Source Package Repository, NPM, das derzeit über eine Million Pakete enthält.

Es ist einfach, mit Node.js anzufangen. Wir haben beschrieben, wie du einen Server in Node.js installierst und erstellst. Jetzt musst du dir nur noch überlegen, wie du Node.js in deinem eigenen Stack verwenden und implementieren willst. Du kannst dein Wissen auch erweitern, indem du die offizielle Node.js Dokumentation auf nodejs.dev besuchst.