Opret HTTP-webserver i Node.js med Code Eksempel
โก Smart opsummering
Node.js bygger en fungerende webserver pรฅ fรฅ linjer ved hjรฆlp af det indbyggede http-modul. Serveren lytter pรฅ en valgt port og besvarer hver anmodning med en statuskode og brรธdtekst, mens separat kode henter data fra andre websteder.

node.js Framework bruges mest til at oprette serverbaserede applikationer. Det kan nemt bruges til at bygge webservere, der leverer indhold til brugerne.
Flere moduler hรฅndterer serverrelaterede anmodninger, den indbyggede http modul det vigtigste blandt dem. Vi vil se pรฅ, hvordan man opretter en grundlรฆggende webserverapplikation ved hjรฆlp af Node.js, og derefter pรฅ, hvordan man anmoder om data fra et andet websted.
Node som en webserver ved hjรฆlp af HTTP
Lad os se pรฅ et eksempel pรฅ, hvordan man opretter og kรธrer en fรธrste Node.js-applikation.
Applikationen opretter et simpelt servermodul, der lytter pรฅ port 7000. Nรฅr en anmodning foretages via browseren pรฅ den port, sender serveren en Hej Verden svar til klienten.
Code Forklaring
-
requirefunktionen lรฆser en JavaScript filen, udfรธrer den og returnerer dens exports-objekt. Her indlรฆser denhttpmodulet, sรฅ dets funktionalitet er tilgรฆngelig i applikationen. - En serverapplikation oprettes ud fra en simpel funktion. Funktionen kรธrer hver gang en anmodning nรฅr serveren.
- Nรฅr en anmodning modtages, sendes svaret med status som 200Dette er standardstatuskoden i en HTTP-header for et vellykket svar.
- Selve svarkroppen er strengen Hej Verden.
server.listenfรฅr applikationen til at lytte efter klientanmodninger pรฅ port 7000. Enhver tilgรฆngelig port kan bruges.
Hvis kommandoen kรธrer korrekt, vises fรธlgende output i browseren.
Produktion
Fra outputtet:
- Browsing til den lokale vรฆrt URL pรฅ port 7000 vises strengen Hej Verden pรฅ siden.
- Da koden angiver port 7000, er outputtet kun synligt, nรฅr der browses til den port.
Her er koden til reference:
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);
Hรฅndtering af GET-anmodninger i Node.js
Det er ligetil at lave en GET-anmodning for at hente data fra et andet websted i Node.js. Historisk set krรฆvede dette request modul, installeret fra kommandolinjen:
npm install request
Den kommando beder Node-pakkehรฅndteringen om at downloade det nรธdvendige modul og installere det. Nรฅr installationen er fuldfรธrt, viser kommandolinjen det installerede modulnavn og version i formen <name>@<version>.
Pรฅ ovenstรฅende รธjebliksbillede, request modulet og dets versionsnummer blev downloadet og installeret.
Code Forklaring
-
requestModulet, der blev installeret i det forrige trin, leverer de funktioner, der er nรธdvendige for at foretage GET-anmodninger til websteder. - En GET-anmodning sendes til et websted, og et callback kรธrer, nรฅr et svar modtages. Callbacket modtager tre parametre:
- Fejl โ registrerer eventuelle fejl, der opstรฅr under anmodningen.
- Respons โ bรฆrer de HTTP-headere, der returneres med svaret.
- Fylde โ indeholder hele indholdet af svaret.
- Indholdet modtaget i
bodyParameteren skrives til konsollen.
Her er koden til reference:
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); });
โ ๏ธ Meddelelse om udfasning: og request modulet var fuldt udfaset i februar 2020 og modtager ingen yderligere opdateringer. Den installeres og kรธrer stadig, sรฅ ovenstรฅende eksempel forbliver gyldigt for eksisterende projekter, men npm install request udskriver nu en advarsel om udfasning. Ny kode skal bruge den indbyggede fetch funktionen vist i nรฆste afsnit.
Sรฅdan laver du HTTP-anmodninger med Native Fetch i Node.js
Node har inkluderet en global fetch funktion siden version 18, der matcher den API, som browsere allerede tilbyder. Ingen pakkeinstallation er nรธdvendig, og funktionen returnerer et lรธfte, sรฅ den fungerer direkte med 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();
Tre forskelle fra callback-stilen er vรฆrd at bemรฆrke. For det fรธrste, fetch afviser kun ved en netvรฆrksfejl; en HTTP 404 eller 500 lรธses stadig korrekt, hvilket er grunden til response.ok der findes en kontrol, og hvorfor det er den mest almindelige fejl at udelade den, nรฅr man flytter fra requestFor det andet leveres kroppen ikke med svaret โ det skal lรฆses eksplicit med response.text() til almindelig tekst eller response.json() for JSON, og hver af disse returnerer sit eget lรธfte. For det tredje, fordi hele kaldet er lรธftebaseret, en enkelt try/catch dรฆkker bรฅde anmodningen og brรธdteksten og erstatter fuldstรฆndigt callback-parameteren error-first.
For scripts, der skal kรธre pรฅ Node 16 eller tidligere, skal du installere node-fetch or axios i stedet, da begge eksponere en sammenlignelig lรธftebaseret grรฆnseflade og kun krรฆver en รฆndring af importlinjen, nรฅr runtime-programmet er opgraderet.
anmodning vs. hent vs. axios: Hvilken skal bruges
Tre HTTP-klienter optrรฆder pรฅ tvรฆrs af det meste Node-materiale, og kun รฉn af dem er en fornuftig standard for nyt arbejde. De adskiller sig i vedligeholdelsesstatus, i om en afhรฆngighed overhovedet er nรธdvendig, og i hvordan hver enkelt signalerer en fejlstatus, sรฅ tabellen nedenfor viser dem side om side.
| Aspect | anmode | hent (indbygget) | Axios |
|---|---|---|---|
| Status | Udfaset siden 2020 | Opretholdt i kernen | Aktivt vedligeholdt |
| Installation | npm pakke | Ingen pรฅ node 18+ | npm pakke |
| stil | Fejl-fรธrste tilbagekald | Promise | Promise |
| JSON-parsing | Manuel eller en json-indstilling | Manuel via response.json() | Automatisk Ur |
| Afviser pรฅ 404 eller 500 | Ingen | Ingen | Ja |
Brug fetch for nye projekter pรฅ en aktuel Node-version, da den ikke tilfรธjer nogen afhรฆngighed og matcher den browser-API, som udviklere allerede kender. Vรฆlg axios nรฅr automatisk JSON-hรฅndtering, anmodningsinterceptorer eller afvisning ved fejlstatusser ville gemme den rigtige kode. Behold request kun i รฆldre applikationer, der allerede er afhรฆngige af det, og som planlรฆgger at erstatte det.
Almindelige Node.js-serverfejl og hvordan man retter dem
De fleste fejl ved opstart af en fรธrste Node-server kommer fra porte, stier eller et manglende svar snarere end fra selve serverkoden.
- EADDRINUSE: en anden proces holder allerede porten. Kรธr
netstat -ano | findstr :7000on Windows ellerlsof -i :7000on macOS og Linux, og stop derefter processen eller vรฆlg en anden port. - EACCES pรฅ en lav havn: Porte under 1024 krรฆver forhรธjede rettigheder. Brug en port over 1024 under udvikling, f.eks. 3000 eller 7000.
- Browseren hรฆnger og indlรฆses aldrig: behandleren ringede aldrig
response.end()Forbindelsen forbliver รฅben, indtil den fรฅr timeout, sรฅ hver sti gennem handleren skal afslutte svaret. - Kan ikke finde modulet 'http': Filnavnet var stavet forkert, eller scriptet kรธrer i en browser i stedet for Node. Core-moduler krรฆver ingen installation.
- รndringer vises ikke: Noden indlรฆser filen รฉn gang ved opstart. Genstart processen efter hver redigering, eller kรธr den under en overvรฅger som f.eks.
node --watch server.js.




