Skapa HTTP-webbserver i Node.js med Code Exempelvis
โก Smart sammanfattning
Node.js bygger en fungerande webbserver pรฅ nรฅgra rader med hjรคlp av den inbyggda http-modulen. Servern lyssnar pรฅ en vald port och svarar pรฅ varje fรถrfrรฅgan med en statuskod och brรถdtext, medan separat kod hรคmtar data frรฅn andra webbplatser.

Ocuco-landskapet node.js Ramverket anvรคnds mestadels fรถr att skapa serverbaserade applikationer. Det kan enkelt anvรคndas fรถr att bygga webbservrar som levererar innehรฅll till anvรคndare.
Flera moduler hanterar serverrelaterade fรถrfrรฅgningar, den inbyggda http modulens frรคmsta bland dem. Vi kommer att titta pรฅ hur man skapar en grundlรคggande webbserverapplikation med Node.js, och sedan hur man begรคr data frรฅn en annan webbplats.
Nod som en webbserver som anvรคnder HTTP
Lรฅt oss titta pรฅ ett exempel pรฅ hur man skapar och kรถr en fรถrsta Node.js-applikation.
Applikationen skapar en enkel servermodul som lyssnar pรฅ port 7000. Nรคr en begรคran gรถrs via webblรคsaren pรฅ den porten skickar servern en Hej Vรคrlden svar till klienten.
Code Fรถrklaring
- Ocuco-landskapet
requirefunktionen lรคser en JavaScript filen, kรถr den och returnerar dess exports-objekt. Hรคr laddar denhttpmodulen sรฅ att dess funktionalitet รคr tillgรคnglig i applikationen. - En serverapplikation skapas frรฅn en enkel funktion. Funktionen kรถrs varje gรฅng en begรคran nรฅr servern.
- Nรคr en begรคran tas emot skickas svaret med statusen 200Detta รคr standardstatuskoden i en HTTP-header fรถr ett lyckat svar.
- Sjรคlva svarstexten รคr strรคngen Hej Vรคrlden.
server.listengรถr att applikationen lyssnar efter klientfรถrfrรฅgningar pรฅ port 7000. Alla tillgรคngliga portar kan anvรคndas.
Om kommandot kรถrs korrekt visas fรถljande utdata i webblรคsaren.
Produktion
Frรฅn utgรฅngen:
- Surfar till den lokala vรคrden URL pรฅ port 7000 visas strรคngen Hej Vรคrlden pรฅ sidan.
- Eftersom koden anger port 7000 syns utdata bara nรคr man blรคddrar till den porten.
Hรคr รคr koden fรถr referens:
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);
Hantera GET-fรถrfrรฅgningar i Node.js
Att gรถra en GET-fรถrfrรฅgan fรถr att hรคmta data frรฅn en annan webbplats รคr enkelt i Node.js. Historiskt sett behรถvde detta request modul, installerad frรฅn kommandoraden:
npm install request
Det kommandot ber Node-pakethanteraren att ladda ner den nรถdvรคndiga modulen och installera den. Nรคr installationen lyckas visar kommandoraden den installerade modulens namn och version i formulรคret <name>@<version>.
Pรฅ รถgonblicksbilden ovan, request modulen och dess versionsnummer laddades ner och installerades.
Code Fรถrklaring
- Ocuco-landskapet
requestModulen som installerades i fรถregรฅende steg tillhandahรฅller de funktioner som behรถvs fรถr att gรถra GET-fรถrfrรฅgningar till webbplatser. - En GET-fรถrfrรฅgan gรถrs till en webbplats, och en รฅteranropning kรถrs nรคr ett svar anlรคnder. ร
teranropet tar emot tre parametrar:
- Fel โ registrerar eventuella fel som uppstod nรคr begรคran gjordes.
- Svar โ bรคr HTTP-rubrikerna som returneras med svaret.
- Kaross โ innehรฅller hela innehรฅllet i svaret.
- Innehรฅllet som mottagits i
bodyparametern skrivs till konsolen.
Hรคr รคr koden fรถr referens:
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); });
โ ๏ธ Meddelande om utfasning: d request modulen var helt avvecklad i februari 2020 och fรฅr inga ytterligare uppdateringar. Den installeras och kรถrs fortfarande, sรฅ exemplet ovan fรถrblir giltigt fรถr befintliga projekt, men npm install request skriver nu ut en varning om utfasning. Ny kod bรถr anvรคnda den inbyggda fetch funktionen som visas i nรคsta avsnitt.
Hur man gรถr HTTP-fรถrfrรฅgningar med Native Fetch i Node.js
Noden har inkluderat en global fetch funktion sedan version 18, vilket matchar API:et som webblรคsare redan tillhandahรฅller. Ingen paketinstallation krรคvs, och funktionen returnerar ett lรถfte, sรฅ den fungerar direkt 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 skillnader frรฅn รฅteruppringningsstilen รคr vรคrda att notera. Fรถr det fรถrsta, fetch avvisar endast vid ett fel pรฅ nรคtverksnivรฅ; en HTTP 404 eller 500 lรถses fortfarande utan problem, vilket รคr anledningen till att response.ok kontrollen finns och varfรถr det vanligaste misstaget vid รถvergรฅng frรฅn att utelรคmna den requestFรถr det andra levereras inte kroppen med svaret โ den mรฅste lรคsas explicit med response.text() fรถr vanlig text eller response.json() fรถr JSON, och var och en av dessa returnerar ett eget lรถfte. Fรถr det tredje, eftersom hela anropet รคr lรถftesbaserat, en enda try/catch tรคcker bรฅde begรคran och brรถdtexten, och ersรคtter helt och hรฅllet callback-parametern error-first.
Fรถr skript som mรฅste kรถras pรฅ Node 16 eller tidigare, installera node-fetch or axios istรคllet, eftersom bรฅda exponerar ett jรคmfรถrbart lรถftesbaserat grรคnssnitt och bara krรคver en รคndring av importraden nรคr kรถrningen har uppgraderats.
begรคran vs hรคmta vs axios: Vilken ska man anvรคnda
Tre HTTP-klienter fรถrekommer i det mesta Node-materialet, och endast en av dem รคr en rimlig standard fรถr nytt arbete. De skiljer sig รฅt i underhรฅllsstatus, i huruvida ett beroende alls behรถvs och i hur var och en signalerar en felstatus, sรฅ tabellen nedan placerar dem sida vid sida.
| Aspect | begรคra | hรคmta (inbyggd) | Axios |
|---|---|---|---|
| Status | Avvecklad sedan 2020 | Bibehรฅlls i kรคrnan | Aktivt underhรฅllen |
| Installation | npm-paket | Ingen pรฅ nod 18+ | npm-paket |
| Stil | Fel-fรถrsta รฅteruppringning | Promise | Promise |
| JSON-parsning | Manuellt eller ett json-alternativ | Manuell via response.json() | Automat |
| Avvisar pรฅ 404 eller 500 | Nej | Nej | Ja |
Anvรคnda fetch fรถr nya projekt pรฅ en aktuell Node-version, eftersom den inte lรคgger till nรฅgot beroende och matchar det webblรคsar-API som utvecklare redan kรคnner till. Vรคlj axios nรคr automatisk JSON-hantering, fรถrfrรฅgningsavlyssnande รฅtgรคrder eller avslag vid felstatus skulle spara riktig kod. Behรฅll request endast inuti รคldre applikationer som redan รคr beroende av det, och planerar att ersรคtta det.
Vanliga Node.js-serverfel och hur man รฅtgรคrdar dem
De flesta fel nรคr man startar en fรถrsta nodserver kommer frรฅn portar, sรถkvรคgar eller ett saknat svar snarare รคn frรฅn sjรคlva serverkoden.
- EADDRINUSE: en annan process har redan porten. Kรถr
netstat -ano | findstr :7000on Windows, ellerlsof -i :7000on macOS och Linux, stoppa sedan den processen eller vรคlj en annan port. - EACCES pรฅ lรฅg hamn: Portar under 1024 behรถver utรถkade rรคttigheter. Anvรคnd en port รถver 1024 under utveckling, till exempel 3000 eller 7000.
- Webblรคsaren hรคnger sig och laddas aldrig: handlรคggaren ringde aldrig
response.end()Anslutningen fรถrblir รถppen tills den nรฅr tidsgrรคnsen, sรฅ varje vรคg genom hanteraren mรฅste avsluta svaret. - Kan inte hitta modulen 'http': Filnamnet stavades fel, eller sรฅ kรถrs skriptet i en webblรคsare istรคllet fรถr Node. Kรคrnmoduler behรถver ingen installation.
- รndringar visas inte: Noden laddar filen en gรฅng vid uppstart. Starta om processen efter varje redigering, eller kรถr den under en bevakare som t.ex.
node --watch server.js.




