Een NestJS-project lokaal creëren en draaien met ServBay op macOS
NestJS is een progressief Node.js-framework voor het bouwen van efficiënte en schaalbare backend-applicaties. Het is geschreven in TypeScript, geïnspireerd door Angular, en maakt gebruik van een modulaire architectuur en dependency injection (DI). NestJS biedt krachtige tools en functionaliteit, waardoor ontwikkelaars gemakkelijk onderhoudbare, testbare en sterk ontkoppelde complexe applicaties kunnen bouwen.
Belangrijkste kenmerken en voordelen van NestJS
- Modulaire architectuur: Organiseer je code via modules, wat de applicatiestructuur overzichtelijk, begrijpelijk en onderhoudbaar maakt.
- Dependency Injection: Biedt een krachtig, gebruiksvriendelijk DI-systeem, wat testbaarheid en onderhoudbaarheid van code sterk verbetert.
- Gebruik van TypeScript: Profiteer van TypeScript's statische typechecking, interfaces en moderne JavaScript features voor betere codekwaliteit en minder runtime-fouten.
- Rijke set aan decorators: Definieer controllers, services, modules, etc. via decorators voor beknopte, declaratieve en duidelijke code.
- Sterk ecosysteem: Een actieve community en een rijkdom aan externe modules en plugins. Eenvoudige integratie van functies als TypeORM, Mongoose, GraphQL, WebSockets, caching, validatie en meer.
- Gebaseerd op standaarden: Gebouwd op volwassen HTTP-servers zoals Express of Fastify, wat goede compatibiliteit en prestaties oplevert.
Met NestJS kun je best practices uit de backendwereld toepassen (zoals SOLID-principes en design patterns) om snel hoogwaardige, enterprise-grade webapplicaties, API-services en microservices te ontwikkelen.
Een NestJS-project opzetten en draaien met ServBay
ServBay biedt een krachtige, geïntegreerde lokale webontwikkelomgeving voor macOS, inclusief verschillende Node.js-versies en populaire databases en webservers. In deze gids gebruiken we ServBay’s Node.js-omgeving en de functie ‘Websites’ om een NestJS-project te creëren, draaien en configureren. Via de reverse proxy-functie van ServBay krijgt je lokale NestJS-app een eigen domeinnaam.
Vereisten
Voor je begint, zorg dat je het volgende hebt voorbereid:
- ServBay geïnstalleerd: Je hebt ServBay succesvol geïnstalleerd op macOS.
- Node.js-pakket geactiveerd: Zorg via het ‘Pakketten’ (Packages)-tabblad in het ServBay-configuratiescherm dat je de gewenste Node.js-versie hebt geselecteerd en geïnstalleerd. Indien Node.js nog niet geactiveerd is, volg dan de ServBay Node.js gebruiksgids.
Een NestJS-project aanmaken
NestJS CLI wereldwijd installeren
Open de terminal en installeer de NestJS CLI wereldwijd via npm (meestal meegeleverd met Node.js). De NestJS CLI is een krachtig hulpmiddel voor het initialiseren, ontwikkelen en onderhouden van NestJS-applicaties.
bashnpm install -g @nestjs/cli
1Project initialiseren
Navigeer naar de aanbevolen website-rootmap van ServBay:
/Applications/ServBay/www
. Deze map is standaard de plek waar ServBay websites plaatst; hier een project aanmaken vereenvoudigt de latere websiteconfiguratie. Gebruik vervolgens de NestJS CLI om een nieuw project te maken:bashcd /Applications/ServBay/www nest new servbay-nest-app
1
2Na deze opdracht leidt de NestJS CLI je door het aanmaakproces, inclusief het kiezen van een package manager (npm, yarn of pnpm). Gebruik bij voorkeur npm voor consistente resultaten. Je project staat na afloop in
/Applications/ServBay/www/servbay-nest-app
.Projectafhankelijkheden installeren
Ga naar de zojuist aangemaakte map
servbay-nest-app
en installeer daar de benodigde afhankelijkheden:bashcd servbay-nest-app npm install
1
2Het
nest new
-commando voert automatischnpm install
uit, maar het opnieuw uitvoeren verzekert dat alle dependencies correct geïnstalleerd of geüpdatet zijn.
De standaarduitvoer van het NestJS-project wijzigen (optioneel)
Om te bevestigen dat je project werkt en toegankelijk is via ServBay, kun je de standaardresponse van de rootroute aanpassen.
Wijzig het bestand
src/app.controller.ts
Open het bestand
src/app.controller.ts
in je favoriete editor. Pas het aan zoals hieronder, zodat een bezoek aan de root (/
) "Hello ServBay!" retourneert:typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // Stel dat je AppService behoudt @Controller() export class AppController { constructor(private readonly appService: AppService) {} // Indien AppService behouden blijft @Get() getHello(): string { // return this.appService.getHello(); // Indien je AppService gebruikt return 'Hello ServBay!'; // Retourneert direct een string } }
1
2
3
4
5
6
7
8
9
10
11
12
13Deze code definieert een eenvoudige controller die HTTP GET-verzoeken naar de root (
/
) afhandelt en de opgegeven string terugstuurt.
Het NestJS-project in development draaien en benaderen via ServBay
NestJS-projecten worden meestal in ontwikkelmodus gedraaid met een ingebouwde server op een bepaalde poort. Met ServBay kan je een reverse proxy instellen om je app via een custom domein te benaderen.
Ontwikkelserver starten
In de projectmap
/Applications/ServBay/www/servbay-nest-app
start je de development server. Stel dePORT
-omgevingvariabele in (bijvoorbeeld op8585
):bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev
1
2npm run start:dev
is een standaard NestJS-script dat metts-node
je TypeScript-code draait en files bewaakt, zodat de server automatisch herstart bij wijzigingen. De server luistert nu oplocalhost:8585
.ServBay-website als reverse proxy instellen
Open het ServBay-configuratiescherm en ga naar het tabblad ‘Websites’. Klik op de knop om een nieuwe website toe te voegen (meestal het
+
-symbool) en voer daar het volgende in:- Naam (Name): Geef een herkenbare naam, zoals
My first NestJS dev site
. - Domeinen (Domains): Voer het lokale domein in, bijvoorbeeld
servbay-nest-test.dev
. ServBay zorgt standaard dat.dev
-domeinen lokaal werken, dus geen hostsbestand nodig. - Type (Type): Kies
Reverse Proxy
. - IP-adres (IP Address): Zet op
127.0.0.1
(localhost). - Poort (Port): Zet op
8585
(dezelfde als de poort waar je NestJS-app op draait).
Sla de instellingen op. ServBay werkt nu automatisch de webserverconfiguratie bij (Caddy of Nginx). Zie ServBay website toevoegen documentatie voor meer gedetailleerde info.
- Naam (Name): Geef een herkenbare naam, zoals
Development site bezoeken
Open een browser en bezoek je nieuwe domein:
https://servbay-nest-test.dev
.Let op:
- ServBay levert automatisch gratis SSL-certificaten voor lokaal ingestelde sites (uitgegeven door ServBay User CA), dus je kunt veilig via
https
werken. Bij een certificaatwaarschuwing moet je mogelijk de ServBay User CA-certificaat vertrouwen. Zie SSL voor sites documentatie voor instructies. - Controleer dat je NestJS dev-server (
PORT=8585 npm run start:dev
) draait. Anders is het domein niet bereikbaar.
- ServBay levert automatisch gratis SSL-certificaten voor lokaal ingestelde sites (uitgegeven door ServBay User CA), dus je kunt veilig via
De productieversie bouwen en benaderen via ServBay
Voor je een NestJS-app in productie draait (ook lokaal) kun je deze eerst bouwen.
Production build uitvoeren
In de projectmap
/Applications/ServBay/www/servbay-nest-app
voer je het volgende uit:bashcd /Applications/ServBay/www/servbay-nest-app npm run build
1
2npm run build
transpileert je broncode met de TypeScript-compiler naar dedist
-directory.Productieserver starten
Na het bouwen start je de productieversie met:
bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js
1
2In productie is er geen file-watching of hot reloading.
Reverse proxy voor productie instellen
Ga terug naar het tabblad ‘Websites’ van ServBay en voeg een nieuwe configuratie toe of pas een bestaande aan voor de productie:
- Naam (Name): Bijvoorbeeld
My first NestJS production site
. - Domeinen (Domains): Bijvoorbeeld
servbay-nest-test.prod
. - Type (Type):
Reverse Proxy
. - IP-adres (IP Address):
127.0.0.1
. - Poort (Port):
8586
(gelijk aan de production server).
Sla de instellingen op.
- Naam (Name): Bijvoorbeeld
Productiesite bezoeken
Surf naar
https://servbay-nest-test.prod
om de productieversie van je NestJS-app te bekijken. Ook hier regelt ServBay SSL-beveiliging.
Verbinding maken met de ingebouwde databases van ServBay
ServBay biedt ingebouwde ondersteuning voor diverse databases, zoals MariaDB (MySQL-compatibel), PostgreSQL, MongoDB en Redis. Bij het ontwikkelen van NestJS-apps kun je eenvoudig connecteren en deze databases gebruiken.
Belangrijk: Zorg dat je het gewenste databasepakket via het tabblad ‘Pakketten’ in het ServBay-configuratiescherm hebt ingeschakeld. In ServBay en bijbehorende documentatie vind je standaard poorten, gebruikersnamen en wachtwoorden voor de databases. Voor productie wordt sterk aanbevolen standaardgegevens aan te passen en aparte databasegebruikers aan te maken.
Hieronder vind je voorbeelden van connectiescripts voor veelgebruikte ORMs/libraries in NestJS. Deze voorbeelden staan vaak in de hoofdmoudle (AppModule
) of een aparte databasemodule.
MongoDB verbinden
Gebruik de
@nestjs/mongoose
module om te koppelen met MongoDB. Installeer eerst de packages:bashnpm install @nestjs/mongoose mongoose
1Configureer daarna
MongooseModule
in je module:typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... overige imports @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // Standaardpoort 27017 // ... andere modules ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13Het standaard MongoDB-connectiestring van ServBay is
mongodb://localhost:27017/
. Gebruik eventueel een MongoDB-tool (zoals MongoDB Compass ofmongosh
) om verbinding te maken metlocalhost:27017
en de databaseservbay-nest-app
aan te maken.Redis verbinden
Gebruik hiervoor de
@nestjs/redis
module. Installeer de benodigde dependencies:bashnpm install @nestjs/redis redis @types/redis
1Stel vervolgens het RedisModule als volgt in:
typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... overige imports @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // Standaardpoort 6379 }), // ... andere modules ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Het standaardadres van de Redis-server bij ServBay is
localhost:6379
.Verbinden met MariaDB (MySQL-compatibel)
Gebruik
@nestjs/typeorm
voor connectie met MariaDB. ServBay ondersteunt MariaDB en MySQL; beide zijn MySQL-protocolcompatibel. TypeORM ondersteunt beide, kiesmysql
ofmariadb
als type. Installeer:bashnpm install @nestjs/typeorm mysql2 typeorm
1Stel hierna het TypeOrmModule in:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... overige imports @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // of 'mysql' host: 'localhost', port: 3306, // Standaardpoort 3306 username: 'root', // Standaard root-user in ServBay MariaDB/MySQL password: 'password', // Standaard root-wachtwoord in ServBay database: 'servbay_nest_app', // Maak de database eerst aan entities: [], // Je entiteitsklassen synchronize: true, // Zet op true voor development; wees voorzichtig in productie }), // ... andere modules ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Let op: Het standaard root-wachtwoord voor MariaDB/MySQL in ServBay is
password
. Gebruik een databaseclient (bijv. TablePlus, DBeaver of MySQL CLI) om te verbinden metlocalhost:3306
, log in metroot
/password
en maak handmatig de databaseservbay_nest_app
aan. Wijzig om veiligheidsredenen het rootwachtwoord en maak voor je applicatie een aparte, beperkte gebruiker aan.PostgreSQL-verbinding maken
Gebruik weer
@nestjs/typeorm
. Installeer de benodigde packages:bashnpm install @nestjs/typeorm pg typeorm
1Stel daarna het TypeOrmModule als volgt in:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... overige imports @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // Standaardpoort 5432 username: 'servbay', // Dit is een voorbeeld; controleer de echte user in ServBay password: 'password', // Dit is een voorbeeld; controleer het actuele wachtwoord database: 'servbay_nest_app', // Maak deze database eerst aan entities: [], // Je entiteitsklassen synchronize: true, // Zet op true voor development; wees voorzichtig in productie }), // ... andere modules ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Let op: De standaardgebruikersnaam en wachtwoord van ServBay PostgreSQL kunnen variëren (vaak
servbay
ofpostgres
). Controleer het ServBay-configuratiescherm of de documentatie voor de juiste gegevens. Gebruik een PostgreSQL-client voorlocalhost:5432
om de database en eventueel een gebruiker aan te maken. In productie altijd standaardgegevens aanpassen.
Samenvatting
Met deze gids kun je met ServBay snel en eenvoudig een NestJS-project lokaal op macOS creëren, draaien en toegankelijk maken. Door de geïntegreerde Node.js-versies, praktische websiteconfiguratie (vooral reverse proxy) en ingebouwde databases van ServBay wordt de lokale ontwikkeling en het testen van NestJS-apps sterk vereenvoudigd. Je schakelt soepel tussen ontwikkel- en productiemodus, benadert je lokale app veilig via aangepaste domeinen en HTTPS, en werkt snel met de krachtige databasevoorzieningen van ServBay.