Luo HTTP-verkkopalvelin Node.js:ssä käyttämällä Code esimerkki
⚡ Älykäs yhteenveto
Node.js rakentaa toimivan web-palvelimen muutamalla rivillä käyttäen sisäänrakennettua http-moduulia. Palvelin kuuntelee valittua porttia ja vastaa jokaiseen pyyntöön statuskoodilla ja rungolla, kun taas erillinen koodi hakee tietoja muilta sivustoilta.

Node.js Kehystä käytetään enimmäkseen palvelinpohjaisten sovellusten luomiseen. Sitä voidaan helposti käyttää web-palvelimien rakentamiseen, jotka tarjoavat sisältöä käyttäjille.
Useat moduulit käsittelevät palvelimeen liittyviä pyyntöjä, sisäänrakennettu http moduulipäällikkö niistä. Tarkastelemme, miten luodaan perus-web-palvelinsovellus Node.js:n avulla ja miten pyydetään tietoja toiselta sivustolta.
Solmu web-palvelimena HTTP:n avulla
Katsotaanpa esimerkkiä ensimmäisen Node.js-sovelluksen luomisesta ja suorittamisesta.
Sovellus luo yksinkertaisen palvelinmoduulin, joka kuuntelee porttia 7000. Kun pyyntö tehdään selaimen kautta kyseisen portin kautta, palvelin lähettää Hei maailma vastaus asiakkaalle.
Code Selitys
-
requirefunktio lukee JavaKäsikirjoitus tiedoston, suorittaa sen ja palauttaa exports-objektinsa. Tässä se lataahttpmoduuli, jotta sen toiminnallisuus on käytettävissä sovelluksessa. - Palvelinsovellus luodaan yksinkertaisella funktiolla. Funktio suoritetaan joka kerta, kun pyyntö saavuttaa palvelimen.
- Kun pyyntö vastaanotetaan, vastaus lähetetään tilassa 200Tämä on HTTP-otsikon vakiotilakoodi onnistuneelle vastaukselle.
- Vastauksen runko itsessään on merkkijono Hei maailma.
server.listensaa sovelluksen kuuntelemaan asiakaspyyntöjä portissa 7000. Mitä tahansa vapaata porttia voidaan käyttää.
Jos komento suoritetaan onnistuneesti, seuraava tuloste näkyy selaimessa.
ulostulo
Tulosteesta:
- Selaaminen paikalliseen isäntään URL portissa 7000 näyttää merkkijonon Hei maailma sivulla.
- Koska koodi määrittää portin 7000, tuloste näkyy vain, kun selataan kyseiseen porttiin.
Tässä on koodi viitteeksi:
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-pyyntöjen käsittely Node.js:ssä
GET-pyynnön tekeminen datan hakemiseksi toiselta sivustolta on yksinkertaista Node.js:ssä. Historiallisesti tämä on vaatinut request moduuli, asennettuna komentoriviltä:
npm install request
Komento pyytää Node-paketinhallintaa lataamaan tarvittavan moduulin ja asentamaan sen. Kun asennus onnistuu, komentorivi näyttää asennetun moduulin nimen ja version muodossa <name>@<version>.
Yllä olevassa kuvakaappauksessa request moduuli ja sen versionumero ladattiin ja asennettiin.
Code Selitys
-
requestEdellisessä vaiheessa asennettu moduuli tarjoaa funktiot, joita tarvitaan GET-pyyntöjen tekemiseen verkkosivustoille. - Sivustolle tehdään GET-pyyntö, ja vastauksen saapuessa suoritetaan takaisinsoitto. Takaisinsoitto vastaanottaa kolme parametria:
- Virhe — kirjaa kaikki pyyntöä tehtäessä ilmenneet virheet.
- Vastaus — sisältää vastauksen mukana palautetut HTTP-otsikot.
- elin — sisältää vastauksen koko sisällön.
- Sisältö, joka vastaanotettiin
bodyParametri kirjoitetaan konsoliin.
Tässä on koodi viitteeksi:
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); });
⚠️ Vanhenemisilmoitus: Ishayoiden opettaman request moduuli oli kokonaan vanhentunut helmikuussa 2020 eikä vastaanota enää päivityksiä. Se asentuu ja toimii edelleen, joten yllä oleva esimerkki on edelleen voimassa olemassa oleville projekteille, mutta npm install request tulostaa nyt vanhentumisvaroituksen. Uuden koodin tulisi käyttää sisäänrakennettua fetch seuraavassa osiossa esitetty funktio.
HTTP-pyyntöjen tekeminen Native fetchillä Node.js:ssä
Solmu on sisällyttänyt globaalin fetch funktio versiosta 18 lähtien, vastaten selainten jo tarjoamaa API-rajapintaa. Pakettien asentamista ei vaadita, ja funktio palauttaa lupauksen, joten se toimii suoraan 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();
Kolme eroa takaisinsoittotyyliin verrattuna on syytä huomata. Ensinnäkin, fetch hylkää vain verkkotason virheen sattuessa; HTTP 404- tai 500-virhe ratkaisee silti onnistuneesti, minkä vuoksi response.ok tarkistus on olemassa ja miksi sen poisjättäminen on yleisin virhe siirryttäessä requestToiseksi, leipätekstiä ei toimiteta vastauksen mukana – se on luettava eksplisiittisesti response.text() pelkkää tekstiä varten tai response.json() JSON-kutsulle, ja jokainen niistä palauttaa oman lupauksensa. Kolmanneksi, koska koko kutsu on lupauspohjainen, yksittäinen try/catch kattaa sekä pyynnön että rungon lukemisen ja korvaa error-first-kutsuparametrin kokonaan.
Skripteille, joiden on toimittava Node 16:ssa tai vanhemmassa, asenna node-fetch or axios sen sijaan, koska molemmat tarjoavat vertailukelpoisen promise-pohjaisen rajapinnan ja vaativat vain muutoksen tuontiriviin, kun ajonaikainen ympäristö on päivitetty.
request vs. fetch vs. axios: kumpaa käyttää
Useimmissa Node-materiaaleissa esiintyy kolme HTTP-asiakasohjelmaa, ja vain yksi niistä on järkevä oletusarvo uusille töille. Ne eroavat toisistaan ylläpitotilan, riippuvuuden tarpeen ja virhetilan signaalin suhteen, joten alla olevassa taulukossa ne on esitetty rinnakkain.
| Aspect | pyyntö | nouto (sisäänrakennettu) | Axios |
|---|---|---|---|
| Tila | Vanhentunut vuodesta 2020 lähtien | Ylläpidetään ytimessä | Aktiivisesti huollettu |
| Asennus | npm-paketti | Ei mitään solmussa 18+ | npm-paketti |
| Tyyli | Virhe ensin -takaisinkutsu | Lupaus | Lupaus |
| JSON-jäsennys | Manuaalinen tai JSON-vaihtoehto | Manuaalinen response.json()-funktion kautta | automaattisesti |
| Hylkää 404- tai 500-koodilla | Ei | Ei | Kyllä |
Käyttää fetch uusille projekteille nykyisessä Node-versiossa, koska se ei lisää riippuvuuksia ja vastaa selaimen API-rajapintaa, jonka kehittäjät jo tuntevat. Valitse axios kun automaattinen JSON-käsittely, pyyntöjen sieppaajat tai virhetilojen hylkääminen tallentaisivat oikeaa koodia. Pidä request vain vanhoissa sovelluksissa, jotka ovat jo siitä riippuvaisia ja suunnittelevat sen korvaamista.
Yleisiä Node.js-palvelinvirheitä ja niiden korjaaminen
Useimmat ensimmäisen solmupalvelimen käynnistyksen epäonnistumiset johtuvat porteista, poluista tai puuttuvasta vastauksesta pikemminkin kuin itse palvelinkoodista.
- LISÄVARUSTEET: toinen prosessi pitää jo porttia hallussaan. Suorita
netstat -ano | findstr :7000on Windowstailsof -i :7000on macOS ja Linux, pysäytä sitten prosessi tai valitse toinen portti. - EACCES matalalla portilla: Alle 1024 olevat portit tarvitsevat laajennetut käyttöoikeudet. Käytä kehityksen aikana yli 1024-porttia, kuten 3000 tai 7000.
- Selain jumiutuu eikä lataudu koskaan: käsittelijä ei koskaan soittanut
response.end()Yhteys pysyy auki, kunnes se aikakatkaistaan, joten jokaisen käsittelijän läpi kulkevan polun on päätettävä vastaus. - Moduulia 'http' ei löydy: Tiedostonimi on kirjoitettu väärin tai skripti suoritetaan selaimessa Noden sijaan. Ydinmoduuleja ei tarvitse asentaa.
- Muutokset eivät näy: Solmu lataa tiedoston kerran käynnistyksen yhteydessä. Käynnistä prosessi uudelleen jokaisen muokkauksen jälkeen tai suorita se tarkkailijan, kuten
node --watch server.js.




