Izradite HTTP web poslužitelj u Node.js-u pomoću Code Primjer

⚡ Pametni sažetak

Node.js gradi funkcionalan web poslužitelj u nekoliko redaka koristeći ugrađeni http modul. Poslužitelj osluškuje odabrani port i odgovara na svaki zahtjev statusnim kodom i tijelom, dok zaseban kod dohvaća podatke s drugih web-mjesta.

  • 🖥️ Izrada servera: http.createServer registrira povratni poziv koji se izvršava jednom po dolaznom zahtjevu i prima objekte zahtjeva i odgovora.
  • 🔢 Status i zaglavlja: writeHead šalje statusni kod i Content-Type prije nego što se zapiše bilo koji sadržaj tijela.
  • 🔌 Vezivanje porta: server.listen pridružuje aplikaciju portu, a može se odabrati bilo koji slobodni broj porta.
  • 📥 Odlazni zahtjevi: Dohvaćanje podataka s druge stranice zahtijeva HTTP klijent, a Node sada nudi globalnu funkciju dohvaćanja.
  • ⚠️ Zastarjeli klijent: Modul zahtjeva je zastario u veljači 2020. i ne bi se trebao koristiti u novom kodu.
  • 🛠️ Neuspjesi pri pokretanju: Greška EADDRINUSE znači da odabrani port već zauzima drugi proces.

Stvorite HTTP web poslužitelj u Node.js

The Node.js Framework se uglavnom koristi za izradu poslužiteljskih aplikacija. Može se lako koristiti za izgradnju web poslužitelja koji korisnicima poslužuju sadržaj.

Nekoliko modula obrađuje zahtjeve povezane s poslužiteljem, ugrađeni http modul glavni među njima. Pogledat ćemo kako stvoriti osnovnu aplikaciju web poslužitelja pomoću Node.js-a, a zatim kako zatražiti podatke s druge stranice.

Čvor kao web poslužitelj koji koristi HTTP

Pogledajmo primjer kako stvoriti i pokrenuti prvu Node.js aplikaciju.

Aplikacija stvara jednostavan poslužiteljski modul koji osluškuje port 7000. Kada se zahtjev uputi putem preglednika na tom portu, poslužitelj šalje Pozdrav svijete odgovor klijentu.

Čvor kao web poslužitelj koji koristi HTTP

Code Objašnjenje

  1. The require funkcija čita JavaScript datoteku, izvršava je i vraća njezin objekt izvoza. Ovdje učitava http modul tako da je njegova funkcionalnost dostupna u aplikaciji.
  2. Serverska aplikacija se stvara iz jednostavne funkcije. Ta se funkcija izvršava svaki put kada zahtjev stigne do servera.
  3. Kada se primi zahtjev, odgovor se šalje sa statusom 200Ovo je standardni statusni kod u HTTP zaglavlju za uspješan odgovor.
  4. Samo tijelo odgovora je niz znakova Pozdrav svijete.
  5. server.listen omogućuje aplikaciji da osluškuje zahtjeve klijenata na portu 7000. Može se koristiti bilo koji dostupan port.

Ako se naredba uspješno pokrene, u pregledniku se pojavljuje sljedeći izlaz.

Izlaz

Izlaz web poslužitelja čvora

Iz izlaza:

  • Pregledavanje lokalnog hosta URL na portu 7000 prikazuje niz Pozdrav svijete na stranici.
  • Budući da kod specificira port 7000, izlaz je vidljiv samo prilikom pregledavanja tog porta.

Evo koda za referencu:

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);

Rukovanje GET zahtjevima u Node.js

Izrada GET zahtjeva za dohvaćanje podataka s druge stranice je jednostavna u Node.js-u. Povijesno gledano, ovo je zahtijevalo request modul, instaliran iz naredbenog retka:

npm install request

Ta naredba traži od Node upravitelja paketa da preuzme potreban modul i instalira ga. Kada instalacija uspije, naredbeni redak prikazuje naziv i verziju instaliranog modula u obliku <name>@<version>.

izlaz zahtjeva za instalaciju npm-a

Na gornjoj snimci, request Modul i njegov broj verzije su preuzeti i instalirani.

Izrada GET zahtjeva u Node.js-u

Code Objašnjenje

  1. The request Modul instaliran u prethodnom koraku pruža funkcije potrebne za slanje GET zahtjeva web stranicama.
  2. GET zahtjev se šalje web-mjestu, a povratni poziv se pokreće nakon što stigne odgovor. Povratni poziv prima tri parametra:
    1. greška — bilježi svaku grešku koja se pojavila prilikom podnošenja zahtjeva.
    2. Odgovor — prenosi HTTP zaglavlja vraćena s odgovorom.
    3. Tijelo — sadrži cijeli sadržaj odgovora.
  3. Sadržaj primljen u body Parametar se zapisuje u konzolu.

Evo koda za referencu:

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);
});

⚠️ Obavijest o ukidanju: o request modul je bio potpuno zastarjelo u veljači 2020. i ne prima daljnja ažuriranja. I dalje se instalira i pokreće, tako da gornji primjer ostaje valjan za postojeće projekte, ali npm install request sada ispisuje upozorenje o zastarivanju. Novi kod treba koristiti ugrađenu fetch funkcija prikazana u sljedećem odjeljku.

Kako napraviti HTTP zahtjeve s izvornim dohvaćanjem u Node.js-u

Čvor je uključio globalno fetch funkcija od verzije 18, koja odgovara API-jima koje preglednici već pružaju. Nije potrebna instalacija paketa, a funkcija vraća obećanje, tako da radi izravno s 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();

Vrijedi napomenuti tri razlike u odnosu na stil povratnog poziva. Prvo, fetch odbija samo u slučaju kvara na razini mreže; HTTP 404 ili 500 se i dalje uspješno rješava, zbog čega response.ok provjera postoji i zašto je njezino izostavljanje najčešća greška pri prelasku s requestDrugo, tijelo se ne isporučuje s odgovorom — mora se eksplicitno pročitati s response.text() za običan tekst ili response.json() za JSON, a svaki od njih vraća vlastito obećanje. Treće, budući da je cijeli poziv temeljen na obećanju, jedan try/catch pokriva i zahtjev i pročitano tijelo, u potpunosti zamjenjujući parametar povratnog poziva za grešku prvo.

Za skripte koje se moraju pokretati na Node 16 ili starijoj verziji, instalirajte node-fetch or axios umjesto toga, budući da oba otkrivaju usporedivo sučelje temeljeno na obećanjima i zahtijevaju samo promjenu u liniji uvoza nakon što se runtime nadogradi.

zahtjev vs. dohvat vs. axios: koji koristiti

Tri HTTP klijenta pojavljuju se u većini Node materijala, a samo jedan od njih je razuman zadani način za novi rad. Razlikuju se po statusu održavanja, po tome je li uopće potrebna ovisnost i po tome kako svaki od njih signalizira status pogreške, pa ih donja tablica postavlja jedan pored drugog.

Aspekt zatražiti dohvati (ugrađeno) aksios
Status Zastarjelo od 2020. Održava se u jezgri Aktivno održavano
Montaža npm paket Nema na čvoru 18+ npm paket
Stil Povratni poziv s prvom greškom Obećanje Obećanje
JSON parsiranje Ručno ili JSON opcija Ručno putem response.json() Automatski
Odbijanja na 404 ili 500 Ne Ne Da

Koristiti fetch za nove projekte na trenutnoj verziji Nodea, budući da ne dodaje nikakvu ovisnost i podudara se s API-jem preglednika koji programeri već znaju. Odaberite axios kada bi automatska obrada JSON-a, presretači zahtjeva ili odbijanje pri statusima grešaka spasili pravi kod. Zadržite request samo unutar naslijeđenih aplikacija koje već ovise o njemu i planiraju ga zamijeniti.

Uobičajene pogreške Node.js servera i kako ih ispraviti

Većina kvarova pri pokretanju prvog Node servera dolazi od portova, putanja ili nedostajućeg odgovora, a ne od samog koda servera.

  • UPOTREBA EADDRINESA: drugi proces već drži port. Pokreni netstat -ano | findstr :7000 on Windows, ili lsof -i :7000 on macOS i Linux, a zatim zaustavite taj proces ili odaberite drugi port.
  • EACCES na niskom priključku: Portovi ispod 1024 zahtijevaju povišene privilegije. Tijekom razvoja koristite port iznad 1024, kao što su 3000 ili 7000.
  • Preglednik se zamrzava i nikad se ne učitava: voditelj nikad nije nazvao response.end()Veza ostaje otvorena dok ne istekne vrijeme, tako da svaki put kroz rukovatelj mora završiti odgovor.
  • Ne mogu pronaći modul 'http': Naziv datoteke je krivo napisan ili se skripta izvršava u pregledniku, a ne u Nodeu. Moduli za Core ne trebaju instalaciju.
  • Promjene se ne prikazuju: Čvor učitava datoteku jednom pri pokretanju. Ponovno pokrenite proces nakon svakog uređivanja ili ga pokrenite pod nadzorom kao što je node --watch server.js.

Pitanja i odgovori

http modul je dovoljan za jednu krajnju točku. Express dodaje usmjeravanje, middleware i parsiranje tijela, što postaje vrijedno ovisnosti kada aplikacija poslužuje nekoliko ruta.

Zahtijevajte https modul umjesto toga i proslijediti ključ i certifikat createServeru. U produkciji, obrnuti proxy poput Nginxa obično prekida TLS i prosljeđuje obični HTTP na Node.

Da. AI Alati pouzdano pretvaraju povratne pozive s greškom u asinkrone čekajuće funkcije. Provjerite dodaje li generirani kod test response.ok, jer se fetch rješava na 404, a ta se provjera često izostavlja.

AI asistenti čitaju kod pogreške i izravno imenuju uzrok, razlikujući sukob portova od problema s dozvolama ili sintaktičke pogreške, što znatno skraćuje nagađanje na prvom Node projektu.

Objekt zahtjeva je stream, stoga prikupite njegove podatkovne događaje u međuspremnik i analizirajte rezultat na kraju događaja. Express i slični okviri pružaju middleware za analizu tijela koji obavlja ovaj korak umjesto vas.

Sažmite ovu objavu uz: