Definitie: Node.js is een open source runtime-omgeving waarmee je JavaScript buiten de webbrowser uitvoert, vooral op servers. Het wordt gebruikt om de backend van webapplicaties, API’s, realtime toepassingen en opdrachtregeltools te bouwen.

In het kort

  • Node.js verscheen in 2009 en draait op V8, de JavaScript-engine van Google die ook in Chrome zit.
  • Node.js is geen programmeertaal en geen framework, maar een omgeving om JavaScript uit te voeren.
  • Het werkt met één thread en een event loop met niet-blokkerende I/O, waardoor het veel gelijktijdige verbindingen efficiënt afhandelt.
  • Met npm, de pakketbeheerder van Node.js, heb je volgens Educative toegang tot meer dan twee miljoen pakketten.

Wat is Node.js?

JavaScript was oorspronkelijk een taal voor de browser. Het zorgde ervoor dat webpagina’s konden reageren op klikken, formulieren konden controleren en menu’s konden openen. Voor het werk op de server, zoals gegevens opslaan, gebruikers laten inloggen en e-mails versturen, gebruikten ontwikkelaars andere talen, zoals PHP, Java, Python of Ruby.

Node.js veranderde dat. Het haalt de JavaScript-engine uit de browser en maakt het mogelijk om JavaScript ook op een server of op je eigen computer te draaien. Daardoor kan één team de voorkant en de achterkant van een webapplicatie in dezelfde taal schrijven.

Kinsta benadrukt dat Node.js geen programmeertaal is en geen framework. De taal is JavaScript; Node.js is de omgeving die die taal buiten de browser uitvoert, met extra mogelijkheden zoals toegang tot bestanden, netwerkverbindingen en het besturingssysteem. Frameworks zoals Express of NestJS worden bovenop Node.js gebouwd.

De naam wordt op verschillende manieren geschreven: Node.js, NodeJS of kortweg Node.

Waar komt Node.js vandaan?

Node.js werd in 2009 geïntroduceerd door Ryan Dahl. Volgens DreamHost was het oorspronkelijk bedoeld voor realtime toepassingen, waarbij de server informatie naar de gebruiker stuurt zonder dat die steeds opnieuw hoeft te vragen. Dahl koos voor de V8-engine van Google, die bekendstond om zijn snelheid. Node.js is open source en wordt onderhouden door een grote gemeenschap. Er verschijnen regelmatig nieuwe versies, waarbij de LTS-versies (long term support) langere tijd worden ondersteund en de gangbare keuze zijn voor productie.

Hoe werkt Node.js?

De kern van Node.js is de event loop. Om dat te begrijpen, helpt een vergelijking met een traditionele server.

Bij veel traditionele serveromgevingen krijgt elk verzoek een eigen proces of thread. Moet dat verzoek wachten op de database of op een bestand, dan staat die thread stil tot het antwoord er is. Bij veel gelijktijdige gebruikers heb je dan veel threads nodig, en dat kost geheugen.

Node.js werkt anders. Het gebruikt één hoofdthread. Moet er gewacht worden op iets trager, zoals een databasevraag, een API-aanroep of het lezen van een bestand, dan geeft Node.js die taak uit handen en gaat intussen verder met het volgende verzoek. Is het antwoord binnen, dan komt de bijbehorende code via de event loop weer aan de beurt. Dit heet niet-blokkerende of asynchrone I/O. Volgens Kinsta gaan echte blokkerende taken naar een interne threadpool.

Het resultaat is dat Node.js veel gelijktijdige verbindingen kan afhandelen met relatief weinig middelen. Het nadeel: een zware berekening op de hoofdthread blokkeert alles. DreamHost noemt Node.js daarom minder geschikt voor zware CPU-taken.

Wat is npm?

npm is de pakketbeheerder die standaard met Node.js wordt meegeleverd. Een pakket is een stuk herbruikbare code van iemand anders, bijvoorbeeld om datums te verwerken, e-mails te versturen, pdf’s te maken of met een betaaldienst te koppelen. Met één commando voeg je zo’n pakket toe aan je project.

Volgens Educative bevat npm meer dan twee miljoen pakketten. Dat grote aanbod is een van de sterkste punten van Node.js: voor bijna elke taak bestaat al een oplossing. Het vraagt ook aandacht. Elk pakket is een afhankelijkheid die je moet bijhouden, en niet elk pakket wordt goed onderhouden.

Waarvoor gebruik je Node.js?

  • Backends en API’s voor webapplicaties en mobiele apps.
  • Realtime toepassingen, zoals chat, live dashboards, notificaties en samenwerkingstools. DreamHost noemt Trello als voorbeeld.
  • Microservices, kleine losse diensten die samen een groter systeem vormen.
  • Datastreaming, bijvoorbeeld het verwerken van uploads of video in delen.
  • Opdrachtregeltools en bouwtools. Veel tools die ontwikkelaars dagelijks gebruiken, draaien op Node.js.
  • Serverless functies bij cloudaanbieders.
  • Full-stack frameworks zoals Next.js, waarin voorkant en serverdeel samenkomen.

Bekende bedrijven die Node.js gebruiken zijn volgens Kinsta onder meer LinkedIn, Spotify, eBay, Reddit en Twitter.

Belangrijke onderdelen van het Node.js-ecosysteem

Onderdeel Wat het is
npm Pakketbeheerder, meegeleverd met Node.js
Express Minimaal en veelgebruikt webframework voor servers en API’s
NestJS Uitgebreider framework met een vaste structuur, vaak met TypeScript
Socket.io Bibliotheek voor realtime verbindingen via websockets
Mongoose Hulpmiddel om met de database MongoDB te werken
TypeScript JavaScript met typecontrole, veel gebruikt in grotere Node.js-projecten

Educative noemt Node.js als onderdeel van bekende combinaties van technieken, zoals de MERN-stack: MongoDB, Express, React en Node.js.

Node.js vs PHP

Node.js wordt vaak vergeleken met PHP, de taal achter WordPress en frameworks zoals Laravel.

Node.js PHP
Type Runtime-omgeving voor JavaScript Server-side scripttaal
Verwerking Asynchroon, event-gedreven Traditioneel synchroon per verzoek
Pakketbeheer npm Composer
Sterk in Realtime toepassingen, API’s, één taal voor voor- en achterkant Websites, CMS’en, klassieke webapplicaties
Bekende frameworks Express, NestJS, Next.js Laravel, Symfony
Hosting Vraagt een omgeving die Node.js ondersteunt Breed beschikbaar, ook bij eenvoudige hosting

Kinsta noemt in zijn vergelijking de StackOverflow Developer Survey 2021, waarin 36 procent van de professionele ontwikkelaars aangaf Node.js te gebruiken en ruim 22 procent PHP. De conclusie van datzelfde artikel is dat de keuze afhangt van de eisen van het project, niet van een algemene voorsprong van een van beide. Beide zijn volwassen, breed gebruikte technieken waarmee je degelijke webapplicaties bouwt.

Hoe ziet een eenvoudige Node.js-server eruit?

Met Node.js zet je met een paar regels code een webserver op. Een minimale server met de ingebouwde http-module ziet er zo uit:

const http = require("http");

const server = http.createServer((req, res) => {
  res.end("Hallo vanuit Node.js");
});

server.listen(3000);

De server luistert op poort 3000 en stuurt bij elk verzoek een korte tekst terug. In de praktijk gebruik je een framework zoals Express, dat routes, middleware en foutafhandeling overzichtelijk maakt. Een route bepaalt welke code draait bij welk adres, bijvoorbeeld een lijst met klanten bij /klanten en de gegevens van één klant bij /klanten/42.

Node.js installeren

Node.js installeer je via de officiële website, met een installatieprogramma voor Windows, macOS en Linux. Op macOS en Linux gebruiken veel ontwikkelaars een versiebeheerder, zodat ze per project een andere Node.js-versie kunnen gebruiken. Na installatie controleer je met het commando node -v welke versie actief is. npm wordt automatisch meegeïnstalleerd. Kinsta beschrijft de installatie per besturingssysteem stap voor stap.

Node.js en databases

Node.js kan met vrijwel elke database werken. Kinsta merkt op dat Node.js vaak wordt gecombineerd met NoSQL-databases zoals MongoDB, terwijl PHP vooral met relationele databases zoals MySQL werkt. Dat is een gewoonte, geen beperking. Node.js werkt net zo goed met PostgreSQL of MySQL, bijvoorbeeld via hulpmiddelen die tabellen vertalen naar objecten in de code. De keuze voor een database hangt af van de gegevens: zijn ze sterk aan elkaar gerelateerd, zoals klanten, orders en facturen, dan ligt een relationele database voor de hand.

Node.js en hosting

Een PHP-applicatie draait bij vrijwel elke hostingpartij. Voor Node.js heb je een omgeving nodig die Node.js-processen ondersteunt. Gangbare opties zijn:

  • Een virtuele server die je zelf inricht, met een procesbeheerder die de applicatie automatisch herstart bij een fout.
  • Een beheerd platform dat Node.js-applicaties draait en schaalt, zonder dat je de server zelf beheert.
  • Serverless functies bij een cloudaanbieder, voor losse taken of API’s met wisselend gebruik.
  • Containers, waarbij de applicatie met alle afhankelijkheden in een vaste verpakking draait.

Let bij elke optie op back-ups, logging, monitoring en de regio waar de gegevens staan.

Voorbeeld: realtime meldingen

Stel dat medewerkers in een werkomgeving direct moeten zien wanneer een klant een bericht stuurt. Met een traditionele aanpak vraagt de browser elke paar seconden aan de server of er iets nieuws is. Met Node.js en websockets, bijvoorbeeld via Socket.io, houdt de browser een open verbinding met de server. Komt er een bericht binnen, dan stuurt de server het direct door naar de juiste medewerker. Dat is het soort toepassing waarvoor Node.js oorspronkelijk is bedacht.

Voordelen van Node.js

  • Eén taal voor voor- en achterkant, wat samenwerking en hergebruik van code makkelijker maakt.
  • Efficiënt bij veel gelijktijdige verbindingen, dankzij de event loop.
  • Groot ecosysteem via npm.
  • Geschikt voor realtime toepassingen en API’s.
  • Grote gemeenschap, met veel ontwikkelaars en documentatie.
  • Gratis en open source, op Windows, macOS en Linux.

Nadelen en beperkingen

  • Minder geschikt voor zware berekeningen, omdat die de hoofdthread blokkeren.
  • Asynchrone code vraagt ervaring. Kinsta noemt de zogeheten callback hell als bekend nadeel: code die door geneste terugroepfuncties moeilijk leesbaar wordt. Moderne schrijfwijzen zoals async/await maken dat beter.
  • Afhankelijkheden beheren. Veel npm-pakketten betekent veel onderdelen die je actueel en veilig moet houden.
  • Weinig vaste structuur. Node.js en Express laten veel vrij, waardoor projecten sterk van elkaar kunnen verschillen. Een framework met afspraken helpt.

Wanneer kies je voor Node.js?

Node.js is een logische keuze als:

  • de applicatie veel gelijktijdige verbindingen of realtime updates heeft, zoals chat of live overzichten;
  • het team al met JavaScript of TypeScript werkt en voor- en achterkant in één taal wil houden;
  • de applicatie vooral bestaat uit een API die gegevens ophaalt en doorgeeft;
  • je een full-stack framework zoals Next.js wilt gebruiken.

Minder voor de hand liggend is Node.js als de applicatie vooral zware berekeningen uitvoert, als er al een stevige basis in een andere taal ligt, of als het team daar meer ervaring mee heeft.

Veelgemaakte fouten met Node.js

  • Zware berekeningen op de hoofdthread, waardoor de hele applicatie trager wordt voor alle gebruikers.
  • Fouten in asynchrone code niet afvangen, waardoor een proces onverwacht stopt.
  • Voor elke kleinigheid een pakket toevoegen, met een lange lijst afhankelijkheden als gevolg.
  • Geen vaste structuur afspreken, waardoor elke ontwikkelaar het anders doet.
  • Verouderde Node.js-versies laten draaien, die geen beveiligingsupdates meer krijgen.

Waar let je op bij een Node.js-project?

  1. Kies een LTS-versie en spreek af hoe updates worden bijgehouden.
  2. Vraag welk framework wordt gebruikt en waarom, zodat de opbouw herkenbaar is voor andere ontwikkelaars.
  3. Overweeg TypeScript voor grotere projecten.
  4. Houd het aantal pakketten beperkt en controleer regelmatig op kwetsbaarheden.
  5. Regel hosting die Node.js goed ondersteunt, inclusief monitoring en automatische herstart bij fouten.
  6. Zorg voor tests, zeker bij asynchrone code waarin fouten minder zichtbaar zijn.
  7. Leg vast waar de broncode staat en wie toegang heeft.

Wat betekent dit voor jouw project?

De keuze tussen Node.js, PHP of een andere techniek is voor een opdrachtgever zelden het belangrijkste vertrekpunt. Ik begin bij het proces: wat komt binnen, wie moet ermee verder en welke informatie heeft die persoon nodig? Daaruit volgt welke eisen er zijn, bijvoorbeeld aan realtime updates, koppelingen of de hoeveelheid gelijktijdige gebruikers.

Wat ik wel belangrijk vind, is dat je kiest voor een gangbare, goed gedocumenteerde techniek. Node.js en PHP met Laravel voldoen daar allebei aan. Dan ben je niet afhankelijk van één ontwikkelaar en kan een ander later aansluiten.

Wil je een webapplicatie of API laten bouwen? Stuur me voor wie het is, wat er nu gebeurt en wat de eerste versie moet oplossen. Dan bepalen we samen de logische eerste stap. Lees ook hoe ik een webapplicatie bouw.

Veelgestelde vragen over Node.js

Wat is Node.js?

Node.js is een open source runtime-omgeving waarmee je JavaScript buiten de browser uitvoert, vooral op servers. Het wordt gebruikt voor backends, API’s, realtime toepassingen en ontwikkeltools.

Is Node.js een programmeertaal?

Nee, Node.js is geen programmeertaal en ook geen framework. Het is een runtime-omgeving die de programmeertaal JavaScript buiten de browser uitvoert, met extra mogelijkheden zoals toegang tot bestanden en netwerkverbindingen.

Is Node.js frontend of backend?

Node.js wordt vooral voor de backend gebruikt: de serverkant van een applicatie. Daarnaast draaien veel ontwikkeltools voor de frontend op Node.js, en frameworks zoals Next.js combineren beide kanten.

Verwante termen

Backend · API · TypeScript · React · Laravel · Serverless

← Terug naar de kennisbank