Een HTTP-webserver maken in Node.js met Code Voorbeeld
โก Slimme samenvatting
Met Node.js bouw je in een paar regels een werkende webserver met behulp van de ingebouwde http-module. De server luistert op een gekozen poort en beantwoordt elk verzoek met een statuscode en een body, terwijl aparte code gegevens ophaalt van andere websites.

De Node.js Het framework wordt voornamelijk gebruikt voor het ontwikkelen van servergebaseerde applicaties. Het kan eenvoudig worden gebruikt om webservers te bouwen die content aan gebruikers leveren.
Verschillende modules verwerken servergerelateerde verzoeken, waaronder de ingebouwde http De belangrijkste module is Node.js. We gaan bekijken hoe je een eenvoudige webserverapplicatie maakt met Node.js, en vervolgens hoe je gegevens van een andere site opvraagt.
Knooppunt als een webserver die HTTP gebruikt
Laten we eens kijken naar een voorbeeld van hoe je een eerste Node.js-applicatie kunt maken en uitvoeren.
De applicatie creรซert een eenvoudige servermodule die luistert op poort 7000. Wanneer er via de browser een verzoek op die poort binnenkomt, stuurt de server een antwoord. Hallo Wereld antwoord aan de klant.
Code Uitleg
- De
requirefunctie leest een JavaScript Het bestand wordt geopend, uitgevoerd en het exportobject wordt geretourneerd. Hier wordt het bestand geladen.httpmodule zodat de functionaliteit ervan beschikbaar is in de applicatie. - Een serverapplicatie wordt gemaakt op basis van een eenvoudige functie. Deze functie wordt uitgevoerd telkens wanneer een verzoek de server bereikt.
- Wanneer een verzoek wordt ontvangen, wordt het antwoord verzonden met een status van 200Dit is de standaardstatuscode in een HTTP-header voor een succesvolle reactie.
- De responsbody zelf is de tekenreeks. Hallo Wereld.
server.listenHiermee zorgt u ervoor dat de applicatie luistert naar clientverzoeken op poort 7000. Elke beschikbare poort kan worden gebruikt.
Als de opdracht succesvol wordt uitgevoerd, verschijnt de volgende uitvoer in de browser.
uitgang
Uit de uitvoer:
- Navigeren naar de lokale host URL Op poort 7000 wordt de tekenreeks weergegeven. Hallo Wereld op de pagina.
- Omdat de code poort 7000 specificeert, is de uitvoer alleen zichtbaar wanneer naar die poort wordt overgeschakeld.
Hier is de code ter referentie:
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);
GET-verzoeken afhandelen in Node.js
Het is in Node.js heel eenvoudig om een โโGET-verzoek te doen om gegevens van een andere site op te halen. Vroeger was hiervoor echter een ander verzoek nodig. request module, geรฏnstalleerd via de commandoregel:
npm install request
Met dat commando vraagt โโu de Node-pakketbeheerder om de benodigde module te downloaden en te installeren. Als de installatie is geslaagd, wordt de naam en versie van de geรฏnstalleerde module in de commandoregel weergegeven in de volgende vorm: <name>@<version>.
In de bovenstaande afbeelding is te zien dat... request De module en het bijbehorende versienummer zijn gedownload en geรฏnstalleerd.
Code Uitleg
- De
requestDe module die in de vorige stap is geรฏnstalleerd, biedt de functies die nodig zijn om GET-verzoeken naar websites te verzenden. - Er wordt een GET-verzoek naar een website gestuurd en een callback-functie wordt uitgevoerd zodra er een reactie binnenkomt. De callback-functie ontvangt drie parameters:
- Fout โ registreert alle fouten die optreden tijdens het uitvoeren van het verzoek.
- antwoord โ bevat de HTTP-headers die met het antwoord worden teruggestuurd.
- Lichaam โ bevat de volledige inhoud van het antwoord.
- De inhoud die is ontvangen in de
bodyDe parameter wordt naar de console geschreven.
Hier is de code ter referentie:
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); });
โ ๏ธ Melding over afschaffing: the request module was volledig afgeschaft in februari 2020. en ontvangt geen verdere updates meer. Het wordt nog steeds geรฏnstalleerd en uitgevoerd, dus het bovenstaande voorbeeld blijft geldig voor bestaande projecten, maar npm install request geeft nu een waarschuwing voor verouderde functionaliteit weer. Nieuwe code moet de ingebouwde functie gebruiken. fetch De functie wordt in de volgende sectie getoond.
Hoe maak je HTTP-verzoeken met native fetch in Node.js?
Node heeft een globale functie toegevoegd. fetch Deze functie is beschikbaar sinds versie 18 en sluit aan op de API die browsers al bieden. Er is geen pakketinstallatie nodig en de functie retourneert een promise, waardoor deze direct werkt met... 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();
Drie verschillen met de callback-stijl zijn het vermelden waard. Ten eerste, fetch De verbinding wordt alleen geweigerd bij een fout op netwerkniveau; een HTTP 404 of 500 wordt nog steeds succesvol opgelost, vandaar dat... response.ok De controle bestaat en waarom het weglaten ervan de meest voorkomende fout is bij het overstappen van requestTen tweede wordt de inhoud niet met het antwoord meegeleverd; deze moet expliciet worden gelezen. response.text() voor platte tekst of response.json() voor JSON, en elk daarvan retourneert een eigen belofte. Ten derde, omdat de hele aanroep op beloftes is gebaseerd, een enkele try/catch Dit dekt zowel het verzoek als de gelezen body, en vervangt de error-first callback-parameter volledig.
Voor scripts die op Node 16 of ouder moeten draaien, installeer je het volgende: node-fetch or axios In plaats daarvan bieden beide een vergelijkbare, op beloftes gebaseerde interface en vereisen ze slechts een wijziging in de importregel zodra de runtime is geรผpgraded.
request vs fetch vs axios: welke te gebruiken?
Drie HTTP-clients komen in de meeste Node.js-documentatie voor, maar slechts รฉรฉn ervan is een verstandige standaardkeuze voor nieuw werk. Ze verschillen in onderhoudsstatus, in de vraag of er รผberhaupt een afhankelijkheid nodig is, en in de manier waarop ze een foutstatus aangeven. Daarom worden ze in de onderstaande tabel naast elkaar weergegeven.
| Aspect | te vragen | ophalen (ingebouwd) | Axios |
|---|---|---|---|
| Status | Niet meer in gebruik sinds 2020. | Onderhouden in de kern | Actief onderhouden |
| Montage | npm-pakket | Geen op Node 18+ | npm-pakket |
| Style | Callback die eerst een fout veroorzaakt | Belofte | Belofte |
| JSON-parsing | Handmatig, of een JSON-optie | Handmatig via response.json() | Automatisch |
| Afwijzingen op 404 of 500 | Nee | Nee | Ja |
Gebruik fetch voor nieuwe projecten op een huidige Node-versie, omdat het geen afhankelijkheden toevoegt en overeenkomt met de browser-API die ontwikkelaars al kennen. Kies axios Wanneer automatische JSON-verwerking, request-interceptors of het afwijzen van fouten daadwerkelijke code zouden besparen. Behoud request Alleen binnen bestaande applicaties die er al van afhankelijk zijn en die ze willen vervangen.
Veelvoorkomende Node.js-serverfouten en hoe je ze kunt oplossen
De meeste problemen bij het opstarten van een eerste Node-server worden veroorzaakt door poorten, paden of een ontbrekende reactie, in plaats van door de servercode zelf.
- EADDRINUSE: Een ander proces bezet de poort al. Uitvoeren
netstat -ano | findstr :7000on Windowsoflsof -i :7000on macOS En als je Linux gebruikt, stop dan dat proces of kies een andere poort. - EACCES op een lage poort: Poorten lager dan 1024 vereisen verhoogde privileges. Gebruik tijdens de ontwikkeling een poort hoger dan 1024, zoals 3000 of 7000.
- De browser loopt vast en laadt nooit: De coรถrdinator heeft nooit gebeld.
response.end()De verbinding blijft open totdat de time-out optreedt, dus elk pad via de handler moet het antwoord beรซindigen. - Kan de module 'http' niet vinden: De bestandsnaam is verkeerd gespeld, of het script wordt uitgevoerd in een browser in plaats van Node. Kernmodules hoeven niet te worden geรฏnstalleerd.
- Er worden geen wijzigingen weergegeven: Node laadt het bestand eenmaal bij het opstarten. Herstart het proces na elke bewerking, of laat het draaien onder een watcher zoals...
node --watch server.js.




