Karol Binkowski
Karol Binkowski
3 minutes read
  • Nest.js
  • Node.js
  • Back-end

Nest.js - Pierwsze kroki

Utworzenie nowego projektu

$ npm i -g @nestjs/cli
$ nest new project-name --strict

Wskazówka

Aby utworzyć projekt z włączonym strict modem w TypeScript, trzeba dodać flagę --strict do polecenia nest new

Główny plik aplikacji main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Na instancji app dodajemy różne rzeczy w zależności, od tego co, potrzebujemy, zazwyczaj pomiędzy app i app.listen(3000).

Rozbudowany plik main.ts z walidacją

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true,
      transform: true,
      forbidNonWhitelisted: true,
    })
  );
  await app.listen(3000);
}
bootstrap();

Wskazówka

Jeżeli zamiast exit code 1 po błędzie chcemy mieć wyrzucony wyjątek, to wtedy można użyć NestFactory.create(AppModule, { abortOnError: false }).

Platforma

Nest.js może używać zarówno Express, jak i Fastify. Najlepiej jest pisać wszystko w Nest.js, ponieważ ten jest abstrakcją nad frameworkami i migracja będzie wówczas łatwiejsza. Nest natomiast daje możliwość sięgania do API naszej platformy za pomocą np. dekoratorów, ale raczej powinno się tego unikać.

Typy i platforma

Aby zaznaczyć dodatkowo jakiej platformy używamy, możemy wykorzystać typ generyczny w celu wprowadzenia wybranej przez nas platformy.

const app = await NestFactory.create<NestExpressApplication>(AppModule);

Załączenie serwera developerskiego

$ npm run start:dev

Pozostałe skrypty npm zawarte po utworzeniu nowego projektu

{
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  }
}

© 2023 Karol Binkowski. All Rights Reserved.