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.

  • ๐Ÿ–ฅ๏ธ Serverskapande: http.createServer registrerar ett รฅteranrop som kรถrs en gรฅng per inkommande begรคran och tar emot begรคran- och svarsobjekt.
  • ๐Ÿ”ข Status och rubriker: writeHead skickar statuskoden och Content-Type innan nรฅgot brรถdtextinnehรฅll skrivs.
  • ๐Ÿ”Œ Portbindning: server.listen kopplar applikationen till en port, och valfritt ledigt portnummer kan vรคljas.
  • ๐Ÿ“ฅ Utgรฅende fรถrfrรฅgningar: Att hรคmta data frรฅn en annan webbplats krรคver en HTTP-klient, och Node levererar nu en global hรคmtningsfunktion.
  • โš ๏ธ Fรถrรฅldrad klient: Fรถrfrรฅgningsmodulen avvecklades i februari 2020 och bรถr inte anvรคndas i ny kod.
  • ๐Ÿ› ๏ธ Startfel: Ett EADDRINUSE-fel betyder att den valda porten redan finns i en annan process.

Skapa HTTP-webbserver i Node.js

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.

Nod som en webbserver som anvรคnder HTTP

Code Fรถrklaring

  1. Ocuco-landskapet require funktionen lรคser en JavaScript filen, kรถr den och returnerar dess exports-objekt. Hรคr laddar den http modulen sรฅ att dess funktionalitet รคr tillgรคnglig i applikationen.
  2. En serverapplikation skapas frรฅn en enkel funktion. Funktionen kรถrs varje gรฅng en begรคran nรฅr servern.
  3. Nรคr en begรคran tas emot skickas svaret med statusen 200Detta รคr standardstatuskoden i en HTTP-header fรถr ett lyckat svar.
  4. Sjรคlva svarstexten รคr strรคngen Hej Vรคrlden.
  5. server.listen gรถ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

Nodens webbserverutdata

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>.

utdata fรถr npm-installationsbegรคran

Pรฅ รถgonblicksbilden ovan, request modulen och dess versionsnummer laddades ner och installerades.

Gรถra en GET-fรถrfrรฅgan i Node.js

Code Fรถrklaring

  1. Ocuco-landskapet request Modulen 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.
  2. 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:
    1. Fel โ€” registrerar eventuella fel som uppstod nรคr begรคran gjordes.
    2. Svar โ€” bรคr HTTP-rubrikerna som returneras med svaret.
    3. Kaross โ€” innehรฅller hela innehรฅllet i svaret.
  3. Innehรฅllet som mottagits i body parametern 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 :7000 on Windows, eller lsof -i :7000 on 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.

Vanliga frรฅgor

http-modulen รคr tillrรคcklig fรถr en enda slutpunkt. Express lรคgger till routing, middleware och body parsing, vilket blir vรคrt beroendet nรคr en applikation hanterar flera rutter.

Krรคv att https modulen istรคllet och skicka en nyckel och ett certifikat till createServer. I produktion avslutar en omvรคnd proxy som Nginx normalt TLS och vidarebefordrar vanlig HTTP till Node.

Ja. AI Verktyg konverterar fel-fรถrst-anrop till async await pรฅ ett tillfรถrlitligt sรคtt. Kontrollera att den genererade koden lรคgger till ett response.ok-test, eftersom fetch lรถses vid 404 och den kontrollen ofta utelรคmnas.

AI-assistenter lรคser felkoden och anger orsaken direkt, vilket skiljer en portkonflikt frรฅn ett behรถrighetsproblem eller ett syntaxfel, vilket avsevรคrt fรถrkortar gissningsarbetet kring ett fรถrsta Node-projekt.

Request-objektet รคr en strรถm, sรฅ samla in dess datahรคndelser i en buffert och analysera resultatet pรฅ sluthรคndelsen. Express och liknande ramverk tillhandahรฅller mellanprogramvara fรถr kroppsparsning som utfรถr detta steg รฅt dig.

Sammanfatta detta inlรคgg med: