Erstellen Sie einen HTTP-Webserver in Node.js mit Code Beispiel

⚡ Intelligente Zusammenfassung

Node.js erstellt mit dem integrierten http-Modul in wenigen Zeilen einen funktionierenden Webserver. Der Server lauscht an einem ausgewählten Port und beantwortet jede Anfrage mit einem Statuscode und einem Antworttext, während separater Code Daten von anderen Websites abruft.

  • ️ Servererstellung: http.createServer registriert einen Callback, der einmal pro eingehender Anfrage ausgeführt wird und Anfrage- und Antwortobjekte empfängt.
  • 🔢 Status und Header: writeHead sendet den Statuscode und den Content-Type, bevor der eigentliche Inhalt geschrieben wird.
  • ???? Portbindung: server.listen verbindet die Anwendung mit einem Port, wobei eine beliebige freie Portnummer gewählt werden kann.
  • 📥 Ausgehende Anfragen: Zum Abrufen von Daten von einer anderen Website wird ein HTTP-Client benötigt, und Node liefert jetzt eine globale Fetch-Funktion mit.
  • ⚠️ Veralteter Client: Das Anfragemodul wurde im Februar 2020 als veraltet markiert und sollte in neuem Code nicht mehr verwendet werden.
  • ️ Startfehler: Ein EADDRINUSE-Fehler bedeutet, dass der gewählte Port bereits von einem anderen Prozess belegt ist.

Erstellen Sie einen HTTP-Webserver in Node.js

Das Node.js Das Framework wird hauptsächlich zur Erstellung serverbasierter Anwendungen verwendet. Es eignet sich hervorragend zum Aufbau von Webservern, die Nutzern Inhalte bereitstellen.

Mehrere Module bearbeiten serverbezogene Anfragen, die integrierten http Das wichtigste Modul dabei ist Node.js. Wir werden uns ansehen, wie man eine einfache Webserver-Anwendung mit Node.js erstellt und anschließend, wie man Daten von einer anderen Website anfordert.

Knoten als Webserver mit HTTP

Schauen wir uns ein Beispiel an, wie man eine erste Node.js-Anwendung erstellt und ausführt.

Die Anwendung erstellt ein einfaches Servermodul, das auf Port 7000 lauscht. Wenn über den Browser eine Anfrage an diesen Port gestellt wird, sendet der Server eine Hallo Welt Antwort an den Kunden.

Knoten als Webserver mit HTTP

Code Erläuterung

  1. Das require Funktion liest ein JavaSkript Die Datei wird ausgeführt und ihr Exportobjekt zurückgegeben. Hier wird die http Modul, sodass seine Funktionalität in der Anwendung verfügbar ist.
  2. Eine Serveranwendung wird aus einer einfachen Funktion erstellt. Diese Funktion wird jedes Mal ausgeführt, wenn eine Anfrage den Server erreicht.
  3. Wenn eine Anfrage eingeht, wird die Antwort mit dem Status „…“ gesendet. 200Dies ist der Standardstatuscode in einem HTTP-Header für eine erfolgreiche Antwort.
  4. Der Antworttext selbst ist die Zeichenkette Hallo Welt.
  5. server.listen Die Anwendung lauscht auf Port 7000 nach Clientanfragen. Es kann jeder verfügbare Port verwendet werden.

Wenn der Befehl erfolgreich ausgeführt wird, erscheint die folgende Ausgabe im Browser.

Ausgang

Ausgabe des Node-Webservers

Aus der Ausgabe:

  • Aufruf des lokalen Hosts URL Auf Port 7000 wird die Zeichenkette angezeigt Hallo Welt auf der Seite.
  • Da der Code Port 7000 angibt, ist die Ausgabe nur sichtbar, wenn man diesen Port ansteuert.

Hier ist der Code als Referenz:

var http = require('http');

var server = http.createServer(function(request, response) {
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.end("Hello World\n");
});

server.listen(7000);

Umgang mit GET-Anfragen in Node.js

Das Senden einer GET-Anfrage zum Abrufen von Daten von einer anderen Website ist in Node.js unkompliziert. Früher benötigte man dafür Folgendes: request Modul, installiert über die Kommandozeile:

npm install request

Dieser Befehl weist den Node-Paketmanager an, das benötigte Modul herunterzuladen und zu installieren. Nach erfolgreicher Installation zeigt die Befehlszeile den Namen und die Version des installierten Moduls in folgender Form an: <name>@<version>.

Ausgabe der npm install-Anfrage

Im obigen Screenshot ist die request Das Modul und seine Versionsnummer wurden heruntergeladen und installiert.

Eine GET-Anfrage in Node.js senden

Code Erläuterung

  1. Das request Das im vorherigen Schritt installierte Modul stellt die Funktionen bereit, die zum Senden von GET-Anfragen an Websites benötigt werden.
  2. Es wird eine GET-Anfrage an eine Website gesendet, und eine Callback-Funktion wird ausgeführt, sobald eine Antwort eintrifft. Die Callback-Funktion erhält drei Parameter:
    1. Fehler — protokolliert alle Fehler, die während der Anfrage aufgetreten sind.
    2. Antwort — enthält die mit der Antwort zurückgegebenen HTTP-Header.
    3. Korpus — enthält den gesamten Inhalt der Antwort.
  3. Der empfangene Inhalt body Der Parameter wird in die Konsole geschrieben.

Hier ist der Code als Referenz:

var request = require("request");

request("https://example.com", function(error, response, body) {
    // Always check the error parameter before using the body
    if (error) {
        console.error("Request failed:", error.message);
        return;
    }
    console.log(body);
});

⚠️ Hinweis zur Einstellung: die request Modul war Vollständig veraltet seit Februar 2020 und erhält keine weiteren Updates. Es lässt sich weiterhin installieren und ausführen, daher bleibt das obige Beispiel für bestehende Projekte gültig, aber npm install request Gibt nun eine Warnung wegen veralteter Funktionen aus. Neuer Code sollte die integrierte Funktion verwenden. fetch Die Funktion wird im nächsten Abschnitt gezeigt.

Wie man HTTP-Anfragen mit dem nativen Fetch-Befehl in Node.js durchführt

Node hat eine globale fetch Diese Funktion ist seit Version 18 verfügbar und entspricht der von Browsern bereits bereitgestellten API. Es ist keine Paketinstallation erforderlich, und die Funktion gibt ein Promise zurück, sodass sie direkt mit Browsern funktioniert. async/await.

// No require and no npm install needed on Node 18 or later

async function getData() {
    try {
        const response = await fetch("https://example.com");

        // fetch does NOT reject on 404 or 500 — check ok yourself
        if (!response.ok) {
            throw new Error("HTTP status " + response.status);
        }

        const body = await response.text();
        console.log(body);

    } catch (err) {
        // Network failures and the throw above both land here
        console.error("Request failed:", err.message);
    }
}

getData();

Drei Unterschiede zum Callback-Stil sind erwähnenswert. Erstens, fetch Ablehnungen erfolgen nur bei Netzwerkfehlern; ein HTTP 404- oder 500-Fehler wird weiterhin erfolgreich aufgelöst, weshalb response.ok Es gibt diese Überprüfung, und warum das Weglassen dieser Überprüfung der häufigste Fehler beim Wechsel von requestZweitens wird der Textkörper nicht mit der Antwort übermittelt – er muss explizit gelesen werden. response.text() für Klartext oder response.json() für JSON, und jede dieser Methoden gibt ein eigenes Promise zurück. Drittens, da der gesamte Aufruf auf Promises basiert, wird ein einzelnes try/catch Umfasst sowohl die Anfrage als auch den gelesenen Body und ersetzt den error-first-Callback-Parameter vollständig.

Für Skripte, die auf Node 16 oder älter ausgeführt werden müssen, installieren Sie node-fetch or axios stattdessen, da beide eine vergleichbare Promise-basierte Schnittstelle bereitstellen und nach dem Upgrade der Laufzeitumgebung lediglich eine Änderung der Importzeile erfordern.

request vs fetch vs axios: Welches ist das richtige?

In den meisten Node-Dokumentationen werden drei HTTP-Clients erwähnt, von denen jedoch nur einer als sinnvolle Standardeinstellung für neue Projekte dient. Sie unterscheiden sich im Wartungsstatus, in der Notwendigkeit von Abhängigkeiten und in der Art der Fehlersignalisierung. Die folgende Tabelle vergleicht sie daher miteinander.

Aspekt Anforderung fetch (eingebaut) Axios
Status Veraltet seit 2020 Im Kern beibehalten Aktiv gepflegt
Installation npm-Paket Keine Einträge auf Knoten 18+ npm-Paket
Design Fehler-zuerst-Callback Versprechen Versprechen
JSON-Analyse Manuelle oder JSON-Option Manuelle Methode über response.json() automatische
Fehler 404 oder 500 Nein Nein Ja

Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, fetch Für neue Projekte mit einer aktuellen Node-Version, da keine zusätzlichen Abhängigkeiten entstehen und die Browser-API den Entwicklern bereits bekannt ist. Wählen Sie axios Wenn die automatische JSON-Verarbeitung, Request-Interceptors oder die Ablehnung von Fehlerstatus echten Code einsparen würden. Beibehalten request nur innerhalb von Legacy-Anwendungen, die bereits davon abhängig sind und die es ersetzen sollen.

Häufige Node.js-Serverfehler und wie man sie behebt

Die meisten Fehler beim Starten eines ersten Node-Servers sind auf Ports, Pfade oder eine fehlende Antwort zurückzuführen und nicht auf den Servercode selbst.

  • EADDRINUSE: Ein anderer Prozess belegt bereits den Port. netstat -ano | findstr :7000 on Windowsden lsof -i :7000 on macOS und Linux, dann beenden Sie diesen Prozess oder wählen Sie einen anderen Port.
  • EACCES an einem niedrigen Port: Für Ports unter 1024 sind erhöhte Berechtigungen erforderlich. Verwenden Sie während der Entwicklung einen Port über 1024, z. B. 3000 oder 7000.
  • Der Browser hängt sich auf und lädt nie: Der Handler hat nie angerufen. response.end()Die Verbindung bleibt so lange offen, bis ein Timeout auftritt, daher muss jeder Pfad durch den Handler die Antwort beenden.
  • Modul 'http' nicht gefunden: Der Dateiname wurde falsch geschrieben, oder das Skript wird in einem Browser anstatt in Node ausgeführt. Kernmodule müssen nicht installiert werden.
  • Änderungen werden nicht angezeigt: Node lädt die Datei einmal beim Start. Starten Sie den Prozess nach jeder Änderung neu oder führen Sie ihn unter einem Watcher wie z. B. aus. node --watch server.js.

Häufig gestellte Fragen

Das http-Modul ist für einen einzelnen Endpunkt ausreichend. Express fügt Routing, Middleware und Body-Parsing hinzu, deren Abhängigkeit sich lohnt, sobald eine Anwendung mehrere Routen bedient.

Fordern Sie die https Stattdessen wird das Modul verwendet und ein Schlüssel sowie ein Zertifikat an `createServer` übergeben. In der Produktionsumgebung beendet normalerweise ein Reverse-Proxy wie Nginx die TLS-Verschlüsselung und leitet unverschlüsseltes HTTP an Node weiter.

Ja. AI Tools wandeln Fehler-zuerst-Callbacks zuverlässig in async/await um. Prüfen Sie, ob der generierte Code eine `response.ok`-Prüfung enthält, da `fetch` bei einem 404-Fehler aufgelöst wird und diese Prüfung häufig vergessen wird.

KI-Assistenten lesen den Fehlercode und benennen die Ursache direkt, wodurch ein Portkonflikt von einem Berechtigungsproblem oder einem Syntaxfehler unterschieden wird, was das Rätselraten bei einem ersten Node-Projekt erheblich verkürzt.

Das Anfrageobjekt ist ein Datenstrom. Sammeln Sie daher seine Datenereignisse in einem Puffer und analysieren Sie das Ergebnis beim Endereignis. Express und ähnliche Frameworks bieten Middleware zum Parsen des Anfragetextes, die diesen Schritt für Sie übernimmt.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: