Looge Node.js-is HTTP-veebiserver koos Code Näide

⚡ Nutikas kokkuvõte

Node.js loob sisseehitatud http-mooduli abil mõne reaga toimiva veebiserveri. Server kuulab valitud porti ja vastab igale päringule olekukoodi ja sisuga, samal ajal kui eraldi kood hangib andmeid teistelt saitidelt.

  • 🖥️ Serveri loomine: http.createServer registreerib tagasihelistamise, mis toimub iga sissetuleva päringu kohta üks kord ning võtab vastu päringu- ja vastuseobjekte.
  • 🔢 Staatus ja päised: writeHead saadab olekukoodi ja sisutüübi enne mis tahes sisu kirjutamist.
  • 🔌 Pordi sidumine: server.listen seob rakenduse pordiga ja valida võib mis tahes vaba pordi numbri.
  • 📥 Väljaminevad päringud: Teiselt saidilt andmete toomiseks on vaja HTTP-klienti ja Node pakub nüüd globaalset toomise funktsiooni.
  • ⚠️ Aegunud klient: Taotlusmoodul aegus 2020. aasta veebruaris ja seda ei tohiks uues koodis kasutada.
  • 🛠️ Käivitustõrked: EADDRINUSE viga tähendab, et valitud port on juba teise protsessi poolt hõivatud.

Looge HTTP-veebiserver rakenduses Node.js

. Node.js raamistikku kasutatakse enamasti serveripõhiste rakenduste loomiseks. Seda saab hõlpsasti kasutada veebiserverite loomiseks, mis pakuvad kasutajatele sisu.

Serveriga seotud päringuid käsitlevad mitmed moodulid, sisseehitatud http mooduli juht neist. Vaatame, kuidas luua Node.js-i abil lihtne veebiserveri rakendus ja seejärel, kuidas teiselt saidilt andmeid taotleda.

Sõlm HTTP-d kasutava veebiserverina

Vaatame näidet, kuidas luua ja käivitada esimene Node.js rakendus.

Rakendus loob lihtsa serverimooduli, mis kuulab porti 7000. Kui sellel portil tehakse brauseri kaudu päring, saadab server Tere maailm vastus kliendile.

Sõlm HTTP-d kasutava veebiserverina

Code Selgitus

  1. . require funktsioon loeb a JavaScript faili, käivitab selle ja tagastab oma ekspordiobjekti. Siin laadib see http moodul, nii et selle funktsionaalsus on rakenduses saadaval.
  2. Serverirakendus luuakse lihtsa funktsiooni abil. See funktsioon käivitub iga kord, kui serverisse jõuab päring.
  3. Kui päring on laekunud, saadetakse vastus staatusega 200See on HTTP päises olev standardne olekukood eduka vastuse korral.
  4. Vastuse sisu ise on string Tere maailm.
  5. server.listen paneb rakenduse kuulama kliendi päringuid pordil 7000. Kasutada võib mis tahes saadaolevat porti.

Kui käsk edukalt käivitatakse, kuvatakse brauseris järgmine väljund.

Väljund

Sõlme veebiserveri väljund

Väljundist:

  • Kohaliku hosti sirvimine URL pordil 7000 kuvab stringi Tere maailm lehel.
  • Kuna kood määrab pordi 7000, on väljund nähtav ainult selle pordi sirvimisel.

Siin on viitamiseks kood:

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-i taotluste käsitlemine Node.js-s

GET-päringu tegemine andmete hankimiseks teiselt saidilt on Node.js-is lihtne. Varem oli selleks vaja request moodul, mis on installitud käsurealt:

npm install request

See käsk palub Node'i paketihalduril alla laadida ja installida vajalik moodul. Kui installimine õnnestub, kuvatakse käsureal installitud mooduli nimi ja versioon kujul <name>@<version>.

npm installitaotluse väljund

Ülaltoodud hetktõmmises on request moodul ja selle versiooninumber laaditi alla ja installiti.

GET-päringu tegemine Node.js-is

Code Selgitus

  1. . request Eelmises etapis installitud moodul pakub funktsioone, mis on vajalikud veebisaitidele GET-päringute tegemiseks.
  2. Saidile esitatakse GET-päring ja vastuse saabumisel toimub tagasihelistamine. Tagasihelistamine saab kolm parameetrit:
    1. viga — registreerib kõik päringu esitamisel ilmnenud vead.
    2. Vastus — kannab vastusega tagastatud HTTP päiseid.
    3. Keha — sisaldab vastuse kogu sisu.
  3. Saadud sisu body parameeter kirjutatakse konsooli.

Siin on viitamiseks kood:

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

⚠️ Toetuse lõpetamise teade: the,en request moodul oli täielikult aegunud 2020. aasta veebruaris ja ei saa edasisi värskendusi. See installitakse ja töötab endiselt, seega jääb ülaltoodud näide kehtima ka olemasolevate projektide jaoks, kuid npm install request kuvab nüüd aegumise hoiatuse. Uus kood peaks kasutama sisseehitatud fetch funktsioon, mida on näidatud järgmises osas.

Kuidas teha HTTP-päringuid natiivse toomisega Node.js-is

Sõlm on lisanud globaalse fetch funktsioon alates versioonist 18, mis vastab brauserite juba pakutavale API-le. Paketti pole vaja installida ja funktsioon tagastab lubaduse, seega töötab see otse 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();

Kolm erinevust tagasihelistamise stiilist väärivad märkimist. Esiteks, fetch lükkab tagasi ainult võrgutaseme rikke korral; HTTP 404 või 500 lahendab ikkagi edukalt, mistõttu response.ok kontroll on olemas ja miks selle väljajätmine on kõige levinum viga kolimisel requestTeiseks, vastusega ei kaasne sisu – seda tuleb lugeda selgesõnaliselt koos vastusega. response.text() lihtteksti või response.json() JSON-i jaoks ja igaüks neist tagastab omaenda lubaduse. Kolmandaks, kuna kogu kutse on lubaduspõhine, siis üks try/catch hõlmab nii päringu kui ka sisu lugemist, asendades täielikult error-first tagasihelistusparameetri.

Skriptide puhul, mis peavad töötama Node 16-s või varasemas versioonis, installige node-fetch or axios selle asemel, kuna mõlemad pakuvad võrreldavat lubaduspõhist liidest ja nõuavad pärast käituskeskkonna uuendamist ainult impordirea muutmist.

päring vs toomine vs axios: millist kasutada

Enamikus Node'i materjalides esineb kolm HTTP-klienti ja ainult üks neist on uue töö jaoks mõistlik vaikeväärtus. Need erinevad hooldusoleku, selle poolest, kas sõltuvust on üldse vaja, ja selle poolest, kuidas igaüks neist veaolekut annab, seega on allolev tabel need kõrvuti asetanud.

Aspekt taotleda toomine (sisseehitatud) aksioosid
olek Aegunud alates 2020. aastast Säilitatakse südamikus Aktiivselt hooldatud
paigaldamine npm pakett Puudub sõlmel 18+ npm pakett
STIIL Vea-esimene tagasihelistamine Lubadus Lubadus
JSON-i parsimine Manuaalne või JSON-valik Manuaalne response.json() kaudu Automaatne
Keeldub 404 või 500 korral Ei Ei Jah

Kasutama fetch uute projektide jaoks praeguses Node'i versioonis, kuna see ei lisa sõltuvust ja vastab brauseri API-le, mida arendajad juba teavad. Valige axios kui automaatne JSON-i käsitlemine, päringute pealtkuulajad või veaolekute korral tagasilükkamine salvestaksid päris koodi. Hoidke request ainult pärandrakendustes, mis sellest juba sõltuvad ja plaanivad selle välja vahetada.

Levinumad Node.js serveri vead ja kuidas neid parandada

Enamik esimese sõlmeserveri käivitamisel tekkivatest tõrgetest tulenevad pigem portidest, teedest või puuduvast vastusest kui serveri koodist endast.

  • TÄHELEPANU KASUTAMINE: Teine protsess juba hoiab porti. Käivita netstat -ano | findstr :7000 on Windowsvõi lsof -i :7000 on macOS ja Linux, siis peatage see protsess või valige mõni muu port.
  • EACCES madala pordi korral: Portidele alla 1024 on vaja kõrgendatud õigusi. Kasutage arenduse ajal porti üle 1024, näiteks 3000 või 7000.
  • Brauser hangub ja ei lae kunagi: käitleja ei helistanud kunagi response.end()Ühendus jääb avatuks kuni ajalõpuni, seega peab iga tee läbi käitleja vastuse lõpetama.
  • Moodulit 'http' ei leitud: failinimi oli valesti kirjutatud või skript töötab brauseris, mitte Node'is. Põhimoodulid ei vaja installimist.
  • Muudatusi ei kuvata: Sõlm laadib faili käivitamisel üks kord. Taaskäivitage protsess pärast iga muudatust või käivitage see jälgija all, näiteks node --watch server.js.

KKK

Ühe lõpp-punkti jaoks piisab http-moodulist. Express lisab marsruutimise, vahetarkvara ja sisu parsimise, mis muutuvad sõltuvust väärt, kui rakendus teenindab mitut marsruuti.

Nõua https mooduli asemel ning edastab võtme ja sertifikaadi serverile createServer. Tootmises lõpetab pöördproksi, näiteks Nginx, tavaliselt TLS-i ja edastab tavalise HTTP-protokolli serverile Node.

Jah. AI tööriistad teisendavad veapõhised tagasihelistused usaldusväärselt asünkroonseteks ootavateks. Kontrollige, et genereeritud kood lisaks response.ok testi, sest fetch lahendab vea 404 korral ja see kontroll jäetakse sageli vahele.

Tehisintellekti assistendid loevad veakoodi ja nimetavad otse põhjuse, eristades pordikonflikti loaprobleemist või süntaksiveast, mis lühendab esimese sõlmeprojekti oletustööd märkimisväärselt.

Päringuobjekt on voog, seega koguge selle andmesündmused puhvrisse ja parsige tulemus lõppsündmuse ajal. Express ja sarnased raamistikud pakuvad sisu parsimise vahetarkvara, mis selle sammu teie eest ära teeb.

Võta see postitus kokku järgmiselt: