Programvareutvikling

Hva er Node.js? JavaScript på serversiden

Vi forklarer med eksempler Node.js sin hendelsesdrevne modell, hvilke oppgaver det er sterkt på, og typisk backend-bruk bygget med Express.js.

Aurora YazılımRedaksjonen 6 min lesetid
Hva er Node.js? JavaScript på serversiden
Hva er Node.js?

Node.js er et åpen kildekode-kjøremiljø som kjører JavaScript-kode utenfor nettleseren, på serveren og på datamaskinen. Det bygger på Googles V8-motor og håndterer mange tilkoblinger effektivt med en hendelsesdrevet, ikke-blokkerende modell for inn- og utdata. Det brukes mye til API-er, sanntidsapplikasjoner, integrasjonstjenester og kommandolinjeverktøy.

Hva er Node.js?

For å svare på hva Node.js er, må vi først rette opp en misforståelse: Node.js er verken et programmeringsspråk eller et rammeverk. Språket er fortsatt JavaScript; Node.js er miljøet som kan kjøre språket utenfor nettleseren.

I mange år levde JavaScript bare i nettleseren. Node.js, som kom i 2009, flyttet V8, JavaScript-motoren i Chrome, over til serveren og ga språket evner som å lese filer, opprette nettverkstilkoblinger og få tilgang til databaser. Slik kunne det samme språket brukes både i frontend og backend.

npm, som følger med Node.js, gir tilgang til et av verdens største åpen kildekode-pakkeregistre. Dette verktøyet, som brukes til å starte et prosjekt, legge til avhengigheter og kjøre skript, gjør Node.js uunnværlig ikke bare for dem som skriver servere, men også for frontend-utviklere.

Kjenner du ikke de grunnleggende begrepene i JavaScript ennå, anbefaler vi at du først ser på artikkelen hva er JavaScript; koden du skriver i Node.js bruker den samme syntaksen.

Slik fungerer den hendelsesdrevne modellen

Det mest særegne ved Node.js er modellen med hendelsesløkke (event loop). I noen tradisjonelle serverstrukturer åpnes en egen tråd for hver forespørsel, og tråden venter til svaret kommer fra databasen. Node.js venter ikke: det starter forespørselen, ber om beskjed når svaret kommer, og tar seg av andre forespørsler i mellomtiden.

Du kan sammenligne det med en servitør på en restaurant. Servitøren leverer bestillingen til kjøkkenet og blir ikke stående ved bordet til maten er klar; hun tar seg av de andre bordene og serverer når maten er ferdig. Én servitør kan nå mange bord i et miljø med mye venting.

Denne modellen kalles ikke-blokkerende inn- og utdata (non-blocking I/O). Det er den som gjør Node.js effektivt i applikasjoner med mye venting, som databasespørringer, lesing av filer eller forespørsler til andre tjenester.

javascriptIkke-blokkerende filtlesing
import { readFile } from "node:fs/promises";

console.log("1. Lesingen startet");

const icerik = readFile("notlar.txt", "utf8")
  .then(metin => console.log("3. Dosya okundu:", metin.length, "karakter"));

console.log("2. Denne linjen kjører uten å vente på filen");

Hva brukes Node.js til?

Svaret på hva Node.js brukes til er bredt, men områdene der det er sterkest, har noe felles: mange samtidige tilkoblinger og mye venting. Typisk bruk er:

  • REST- og GraphQL-API-er: backend-tjenester som leverer data til mobilapper og webgrensesnitt
  • Sanntidsapplikasjoner: live chat, varsler, ordresporing, felles arbeidsskjermer
  • Integrasjonstjenester: mellomlag som flytter data mellom markedsplasser, frakt-, betalings- og regnskapssystemer
  • Webhook-mottakere: endepunkter som tar imot og behandler hendelser fra eksterne systemer
  • Kommandolinjeverktøy og byggeprosesser: utviklerverktøy som npm og Vite kjører også på Node.js
  • Rendering på serversiden: generering av sider på serveren med rammeverk som Next.js

Et scenario fra virkeligheten

Tenk deg hotellprogramvare: skjermen i resepsjonen, det elektroniske reservasjonsskjemaet og salgskanalene må se den samme romtilgjengeligheten. Når en reservasjon kommer inn, må de andre skjermene oppdateres i løpet av sekunder. Slike øyeblikkelige varsler er det naturlige bruksområdet for hendelsesdrevne servere som kan holde mange åpne tilkoblinger med få ressurser.

Node.js backend og Express.js

Det mest kjente hjelpeverktøyet for Node.js backend-utvikling er Express.js. Express er et lite og fleksibelt rammeverk for nettet som gjør det enkelt å håndtere adresser (route), forespørsler og svar og mellomlag (middleware). Fastify, NestJS og Koa er andre alternativer som brukes til det samme.

Eksempelet under lager et enkelt API-endepunkt som returnerer en produktliste. I et reelt prosjekt må disse dataene komme fra en database, og autentisering og feilhåndtering må legges til. Vil du vite mer om selve API-begrepet, forklarer artikkelen vår hva er et API REST-logikken steg for steg.

bashProsjektoppsett
mkdir urun-api && cd urun-api
npm init -y
npm install express
javascriptindex.js
const express = require("express");
const app = express();
app.use(express.json());

const urunler = [
  { id: 1, ad: "Olivenolje" },
  { id: 2, ad: "Timianhonning" }
];

app.get("/api/urunler", (req, res) => {
  res.json(urunler);
});

app.listen(3000, () => {
  console.log("API-et kjører på http://localhost:3000");
});

Styrker og svakheter

Som all teknologi er Node.js sterkt på noen oppgaver, mens det ikke er riktig valg for andre. Beslutningen bør tas ut fra applikasjonens arbeidsbelastning, ikke ut fra slagord.

Der det er sterktDer du må være oppmerksom
Mange samtidige tilkoblingerBeregninger som krever mye prosessorkraft
Sanntidskommunikasjon (WebSocket)Langvarig bilde- og videobehandling
Ett språk i frontend og backendRaskt voksende antall avhengigheter
Et svært bredt økosystem av pakker med npmJevnlig oppfølging av pakkesikkerhet
Rask prototypingBehov for arkitektonisk disiplin i store prosjekter

Løsninger for tunge beregninger

Oppgaver som holder prosessoren opptatt lenge, kan overlates til worker threads i Node.js, en egen jobbkø eller en tjeneste skrevet i et språk som passer bedre til oppgaven. Slik kan hovedapplikasjonen fortsette å svare på brukerforespørsler.

Pakkesikkerhet

npm-økosystemet er en stor fordel, men hver avhengighet er også en risiko. Grunnleggende tiltak er å velge pakker som vedlikeholdes og er mye brukt, å sjekke kjente sårbarheter jevnlig med npm audit og å ha låsefilen (package-lock.json) i versjonskontroll.

Node.js i integrasjoner

Programvaren til en virksomhet fungerer sjelden alene. Nettsiden tar imot bestillingen, forsendelsesinformasjon går til fraktselskapet, fakturaen havner i regnskapsprogrammet, og lageret på markedsplassen oppdateres. Mellomlagene som flytter data mellom disse systemene, passer svært godt til den ventetunge strukturen i Node.js.

For eksempel tas et ordrevarsel fra en ekstern tjeneste imot i et endepunkt, valideres, skrives til databasen og videresendes til de aktuelle systemene. Å bygge slike flyter pålitelig krever også detaljer som nytt forsøk, logging og feilvarsling; det vanskelige med integrasjoner er ikke koden, men disse detaljene.

For tilkoblinger til markedsplasser og frakt har vi på sidene markedsplassintegrasjon og fraktintegrasjon forklart hvordan data flyter fra bestilling til levering. Uansett hvilken teknologi den skrives i, er målestokken for en god integrasjon at den fjerner manuell dataregistrering.

Slik kommer du i gang med Node.js

For å komme i gang holder det å installere den gjeldende LTS-versjonen som passer operativsystemet ditt, fra nodejs.org. LTS er versjonslinjen som får langtidsstøtte og anbefales for produksjonsprosjekter. Etter installasjonen kan du verifisere versjonen i terminalen med kommandoene under.

  1. Begynn med kjernetemaer som modulsystemet og fil- og stioperasjoner.
  2. Bli komfortabel nok til å lese asynkron kode med Promise og async/await.
  3. Skriv et lite API med Express, og koble deretter til en database.
  4. Lær miljøvariabler, feilhåndtering og logging.
  5. Ha koden din i versjonskontroll og gjør commit i små steg.
bashVerifisering av installasjonen
node -v
npm -v

Ikke neglisjer versjonskontroll

Å følge prosjektet med Git fra første dag gjør det enklere å angre en feil endring og å samarbeide i team. For grunnleggende kunnskap kan du se artikkelen vår hva er Git.

Vanlige spørsmål

01Er Node.js et programmeringsspråk?

Nei. Node.js er et miljø som kjører JavaScript utenfor nettleseren. Språket er fortsatt JavaScript; Node.js gir det serverevner som filsystem, nettverk og prosesshåndtering.

02Node.js eller PHP, hva er best?

Det finnes ingen absolutt vinner. Node.js er komfortabelt for sanntid og ventetunge oppgaver, mens PHP er det på tradisjonell delt hosting og i modne innholdsprosjekter. Teamets kompetanse og vedlikeholdsplanen for prosjektet blir ofte avgjørende.

03Trenger Node.js en egen server?

Siden Node.js-applikasjoner kjører som en prosess som er i gang hele tiden, trengs en server, VPS eller skyplattform som støtter det. Klassiske delte pakker som bare hoster statiske filer, er ofte ikke nok.

04Hvilke Node.js-rammeverk finnes det foruten Express?

Fastify er ytelsesfokusert, mens NestJS gir en lagdelt og TypeScript-orientert struktur for store team. Koa har en mer minimalistisk tilnærming. Valget bør gjøres ut fra prosjektets størrelse og teamets vaner.

Node.js flytter JavaScript til serveren og gjør det mulig å bygge API-er, sanntidsapplikasjoner og integrasjonslag med ett enkelt språk; ved tunge beregninger bør det støttes av riktig arkitektur. Planlegger du en backend tilpasset virksomheten din eller dataflyt mellom systemer, kan du se våre skreddersydde programvareløsninger, og for forbindelser til butikk og markedsplasser kan du se integrasjonstjenesten vår.