Mikä on Node.js? JavaScript palvelinpuolella
Käymme esimerkein läpi Node.js:n tapahtumapohjaisen rakenteen, sen vahvuusalueet ja Express.js:llä rakennetut tyypilliset backend-käyttötapaukset.

Node.js on avoimen lähdekoodin suoritusympäristö, joka ajaa JavaScript-koodia selaimen ulkopuolella, palvelimella ja tietokoneella. Se perustuu Googlen V8-moottoriin ja hallitsee tehokkaasti suuren määrän samanaikaisia yhteyksiä tapahtumapohjaisella, estottomalla syöttö-tulostusmallilla. Sitä käytetään laajasti API:ihin, reaaliaikaisiin sovelluksiin, integraatiopalveluihin ja komentorivityökaluihin.
Mikä on Node.js?
Mikä on Node.js -kysymykseen vastaamiseksi on ensin oikaistava väärinkäsitys: Node.js ei ole ohjelmointikieli eikä kehys. Kieli on edelleen JavaScript; Node.js on ympäristö, joka voi ajaa tätä kieltä selaimen ulkopuolella.
Monta vuotta JavaScript eli vain selaimessa. Vuonna 2009 ilmestynyt Node.js toi Chromen JavaScript-moottorin V8:n palvelimelle ja antoi kielelle kyvyn lukea tiedostoja, muodostaa verkkoyhteyksiä ja käyttää tietokantaa. Näin samaa kieltä voitiin käyttää sekä käyttöliittymässä että taustajärjestelmässä.
Node.js:n mukana tuleva npm antaa pääsyn yhteen maailman suurimmista avoimen lähdekoodin pakettirekistereistä. Projektin aloittamiseen, riippuvuuksien lisäämiseen ja skriptien ajamiseen käytettävä työkalu tekee Node.js:stä välttämättömän paitsi palvelinpuolen kehittäjille myös käyttöliittymäkehittäjille.
Jos et vielä tunne JavaScriptin peruskäsitteitä, suosittelemme tutustumaan ensin artikkeliin mikä on JavaScript; Node.js:ssä kirjoittamasi koodi käyttää samaa syntaksia.
Miten tapahtumapohjainen rakenne toimii?
Node.js:n erottuvin ominaisuus on tapahtumasilmukka (event loop) -malli. Joissakin perinteisissä palvelinrakenteissa jokaiselle pyynnölle avataan oma säie, ja tämä säie odottaa, kunnes tietokanta vastaa. Node.js ei odota: se käynnistää pyynnön, pyytää ilmoituksen vastauksen tullessa ja käsittelee sillä välin muita pyyntöjä.
Voit verrata tätä ravintolan tarjoilijaan. Tarjoilija vie tilauksen keittiöön eikä jää seisomaan pöydän viereen ruoan valmistumisen ajaksi; hän hoitaa muita pöytiä ja tarjoilee ruoan, kun se on valmis. Yksi tarjoilija ehtii palvella monta pöytää ympäristössä, jossa odotusta on paljon.
Tätä mallia kutsutaan estottomaksi syötöksi ja tulosteeksi (non-blocking I/O). Juuri tämä tekee Node.js:stä tehokkaan sovelluksissa, joissa on paljon odotusta vaativia töitä, kuten tietokantakyselyjä, tiedostojen lukemista tai toiselle palvelulle lähetettäviä pyyntöjä.
import { readFile } from "node:fs/promises";
console.log("1. Lukeminen alkoi");
const icerik = readFile("notlar.txt", "utf8")
.then(metin => console.log("3. Dosya okundu:", metin.length, "karakter"));
console.log("2. Tämä rivi suoritetaan odottamatta tiedostoa");Mihin Node.js:ää käytetään?
Mihin Node.js:ää käytetään -kysymykseen vastaus on laaja; mutta vahvimmilla alueilla on yhteinen piirre: paljon samanaikaisia yhteyksiä ja runsaasti odotusta. Tyypillisiä käyttötapoja ovat:
- REST- ja GraphQL-API:t: taustapalvelut, jotka tarjoavat dataa mobiilisovellukselle ja verkon käyttöliittymälle
- Reaaliaikaiset sovellukset: live-chat, ilmoitukset, tilausten seuranta, yhteiset työnäkymät
- Integraatiopalvelut: välikerrokset, jotka siirtävät dataa markkinapaikkojen, toimitusyhtiöiden, maksu- ja kirjanpitojärjestelmien välillä
- Webhook-vastaanottajat: päätepisteet, jotka ottavat vastaan ja käsittelevät ulkoisten järjestelmien tapahtumia
- Komentorivityökalut ja käännösprosessit: myös kehittäjätyökalut kuten npm ja Vite toimivat Node.js:n päällä
- Palvelinpuolen renderöinti: sivujen tuottaminen palvelimella kehyksillä, kuten Next.js
Esimerkki oikeasta elämästä
Ajattele hotelliohjelmistoa: vastaanoton näytön, verkkovarauslomakkeen ja myyntikanavien on nähtävä sama huonesaatavuus. Kun varaus tulee, muiden näyttöjen on päivityttävä sekunneissa. Tällaiset reaaliaikaiset ilmoitukset ovat luonteva käyttöalue tapahtumapohjaisille palvelimille, jotka pystyvät pitämään suuren määrän avoimia yhteyksiä pienillä resursseilla.
Node.js backend ja Express.js
Node.js backend -kehityksessä tunnetuin apuväline on Express.js. Express on pieni ja joustava verkkokehys, joka helpottaa osoitteiden (route), pyyntöjen ja vastausten sekä välikerrosten (middleware) hallintaa. Fastify, NestJS ja Koa ovat samaan tarkoitukseen käytettäviä muita vaihtoehtoja.
Alla oleva esimerkki rakentaa yksinkertaisen API-päätepisteen, joka palauttaa tuoteluettelon. Oikeassa projektissa tämän datan tulee tulla tietokannasta ja mukaan on lisättävä todennus ja virheenkäsittely. Jos API-käsite kiinnostaa tarkemmin, artikkelimme mikä on API käy REST-logiikan läpi vaihe vaiheelta.
mkdir urun-api && cd urun-api
npm init -y
npm install expressconst express = require("express");
const app = express();
app.use(express.json());
const urunler = [
{ id: 1, ad: "Oliiviöljy" },
{ id: 2, ad: "Timjamihunaja" }
];
app.get("/api/urunler", (req, res) => {
res.json(urunler);
});
app.listen(3000, () => {
console.log("API toimii osoitteessa http://localhost:3000");
});Vahvuudet ja heikkoudet
Kuten jokainen teknologia, Node.js loistaa tietyissä tehtävissä, eikä se ole oikea valinta joihinkin muihin. Päätös tulee tehdä sovelluksen työkuorman, ei iskulauseiden mukaan.
| Vahvuusalueet | Huomiota vaativat alueet |
|---|---|
| Suuri määrä samanaikaisia yhteyksiä | Raskaat prosessorivaativat laskennat |
| Reaaliaikainen viestintä (WebSocket) | Pitkäkestoinen kuvan / videon käsittely |
| Yksi kieli käyttöliittymässä ja taustajärjestelmässä | Riippuvuuksien määrän nopea kasvu |
| Erittäin laaja pakettiekosysteemi npm:n kautta | Pakettien tietoturvan säännöllinen seuranta |
| Nopea prototyyppien teko | Arkkitehtuurikurin tarve suuressa projektissa |
Ratkaisut raskaaseen laskentaan
Prosessoria pitkään kuormittavat työt voidaan siirtää Node.js:n sisällä worker thread -säikeille, erilliselle työjonolle tai tähän tehtävään sopivammalla kielellä kirjoitetulle palvelulle. Näin pääsovellus voi jatkaa käyttäjien pyyntöihin vastaamista.
Pakettien tietoturva
npm-ekosysteemi on suuri etu, mutta jokainen riippuvuus on myös riski. Perustoimet ovat ylläpidettyjen ja laajasti käytettyjen pakettien valinta, tunnettujen haavoittuvuuksien säännöllinen tarkistus npm audit -komennolla ja lukitustiedoston (package-lock.json) pitäminen versionhallinnassa.
Node.js integraatioissa
Yrityksen ohjelmistot harvoin toimivat yksin. Verkkosivusto ottaa vastaan tilauksen, toimitusyhtiölle lähtee lähetystieto, kirjanpito-ohjelmaan tulee lasku ja markkinapaikan varasto päivittyy. Näiden järjestelmien välillä dataa siirtävät välikerrokset sopivat erittäin hyvin Node.js:n odotusvaltaiseen rakenteeseen.
Esimerkiksi ulkoisesta palvelusta tuleva tilausilmoitus otetaan vastaan päätepisteessä, validoidaan, kirjoitetaan tietokantaan ja välitetään asianomaisille järjestelmille. Tällaisten kulkujen rakentaminen luotettaviksi vaatii myös yksityiskohtia, kuten uudelleenyritys, lokitus ja virheilmoitus; integraatiotyön vaikea puoli ei ole koodi vaan nämä yksityiskohdat.
Markkinapaikka- ja toimitusyhteyksistä kerroimme markkinapaikkaintegraatio- ja kuljetusintegraatio -sivuillamme, miten data kulkee tilauksesta toimitukseen. Millä teknologialla se onkin kirjoitettu, hyvän integraation mittari on, että se poistaa käsin tehtävän tiedonsyötön.
Node.js:n oppimisen aloittaminen
Aloittaaksesi riittää, että asennat osoitteesta nodejs.org käyttöjärjestelmääsi sopivan ajantasaisen LTS-version. LTS on pitkäaikaistuettu ja tuotantoprojekteille suositeltu versiolinja. Asennuksen jälkeen voit varmistaa version päätteessä alla olevilla komennoilla.
- Aloita ydinaiheista, kuten moduulijärjestelmä sekä tiedosto- ja polkuoperaatiot.
- Pääse tasolle, jolla luet asynkronista koodia sujuvasti Promisen ja async/awaitin avulla.
- Kirjoita Expressillä pieni API ja liitä sitten tietokanta.
- Opettele ympäristömuuttujat, virheenkäsittely ja lokitus.
- Pidä koodisi versionhallinnassa ja tee commit pienin askelin.
node -v
npm -vÄlä laiminlyö versionhallintaa
Projektin seuraaminen Gitillä ensimmäisestä päivästä alkaen helpottaa virheellisen muutoksen peruuttamista ja tiimityötä. Perusteisiin tutustut artikkelissamme mikä on Git.
Usein kysytyt kysymykset
01Onko Node.js ohjelmointikieli?
Ei. Node.js on ympäristö, joka ajaa JavaScriptiä selaimen ulkopuolella. Kieli on edelleen JavaScript; Node.js lisää siihen palvelinominaisuuksia, kuten tiedostojärjestelmän, verkon ja prosessien hallinnan.
02Kumpi on parempi, Node.js vai PHP?
Ehdotonta voittajaa ei ole. Node.js on kotonaan reaaliaikaisissa ja odotusvaltaisissa töissä, PHP perinteisessä jaetussa webhotellissa ja kypsissä sisältöprojekteissa. Tiimin osaaminen ja projektin ylläpitosuunnitelma ratkaisevat usein.
03Tarvitaanko Node.js:lle erityinen palvelin?
Koska Node.js-sovellukset toimivat jatkuvasti käynnissä olevana prosessina, tarvitaan sitä tukeva palvelin, VPS tai pilvialusta. Pelkkiä staattisia tiedostoja ylläpitävät perinteiset jaetut paketit eivät yleensä riitä.
04Mitä muita Node.js-kehyksiä on Expressin lisäksi?
Fastify keskittyy suorituskykyyn, NestJS tarjoaa suurille tiimeille kerrosmaisen ja TypeScript-painotteisen rakenteen. Koa noudattaa minimalistisempaa lähestymistapaa. Valinta tulee tehdä projektin koon ja tiimin tottumusten mukaan.
Node.js tuo JavaScriptin palvelimelle ja mahdollistaa API:iden, reaaliaikaisten sovellusten ja integraatiokerrosten rakentamisen yhdellä kielellä; raskaissa laskentatöissä sen tueksi tarvitaan oikea arkkitehtuuri. Jos suunnittelet yrityksellesi räätälöityä taustajärjestelmää tai järjestelmien välistä datavirtaa, voit tutustua räätälöityihin ohjelmistoratkaisuihimme ja kauppa- ja markkinapaikkayhteyksiä varten integraatiopalveluumme.


