Case StudiesBlogO nas
Porozmawiajmy

Jak zacząć z NestJS: nowoczesny framework dla Node.js

Viktor Kharchenko

14 lis 20235 min czytania

Software development

Spis treści

  • Czym jest NestJS?

  • Moduły i providery

    • Moduły: 

    • Providers: 

  • Architektura MVC

    • Model: 

    • View:

    • Kontroler: 

  • Wsparcie dla TypeScript

  • Wstrzykiwanie zależności

  • Dekoratory

    • @Controller: 

    • @Get, @Post, @Put, @Delete: 

    • @Param, @Query, @Body: 

    • @Injectable: 

  • Pierwsze kroki z NestJS

  • Podsumowanie

  • FAQ

Node.js w ostatnich latach zdobył ogromną popularność w tworzeniu aplikacji po stronie serwera dzięki wysokiej wydajności i skalowalności. Jeśli chcesz zacząć swoją przygodę z Node.js i szukasz solidnego, dobrze zorganizowanego frameworka, NestJS będzie świetnym wyborem. W tym artykule przedstawimy NestJS i przeprowadzimy Cię przez jego podstawy.

Czym jest NestJS?

NestJS to progresywny framework Node.js zaprojektowany do tworzenia wydajnych, skalowalnych i łatwych w utrzymaniu aplikacji backendowych. Łączy możliwości Node.js z TypeScript, co czyni go atrakcyjnym wyborem dla programistów preferujących statycznie typowane języki. Przyjrzyjmy się kluczowym elementom NestJS:

Moduły i providery

Aplikacje w NestJS powstają w podejściu modułowym. Moduły i providery to podstawowe elementy składowe aplikacji w NestJS.

Moduły: 

Moduł pozwala podzielić aplikację na odrębne, wielokrotnego użycia części. Każdy moduł enkapsuluje powiązany zestaw komponentów, takich jak kontrolery, serwisy i inne powiązane pliki. Moduły pomagają utrzymać czysty i uporządkowany kod.

Providers: 

Providers to klasy, które można wstrzykiwać do innych komponentów, takich jak kontrolery czy serwisy. Odgrywają kluczową rolę w definiowaniu logiki biznesowej aplikacji. Providers oznacza się dekoratorem @Injectable(), dzięki czemu mogą być wstrzykiwane do komponentów, które od nich zależą.

Architektura MVC

NestJS korzysta z wzorca architektonicznego Model-View-Controller (MVC), oferując uporządkowane podejście do budowy aplikacji. Taki podział odpowiedzialności ułatwia utrzymanie kodu i sprzyja skalowalności.

Model: 

W NestJS Model reprezentuje dane i logikę biznesową aplikacji. Określa strukturę danych i sposób interakcji z bazą danych. Oto przykład prostego modelu użytkownika w TypeScript:

// user.model.ts
export class User {
  id: number;
  username: string;
  email: string;
  // ... other properties and methods
}

View:

Choć NestJS koncentruje się głównie na backendzie, możesz tworzyć API pełniące rolę „widoku” dla aplikacji frontendowych. Endpointy API definiowane w kontrolerach stanowią interfejs komunikacji frontendu z serwerem.

Kontroler: 

Kontrolery obsługują przychodzące żądania, przetwarzają je, wywołując serwisy, i zwracają odpowiedzi. Odpowiadają za definiowanie tras i logiki obsługi żądań. Dekoratory odgrywają kluczową rolę w definiowaniu tras i łączeniu kontrolerów z konkretnymi endpointami. Oto przykład prostego kontrolera w NestJS:

// app.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller('app')
export class AppController {
  @Get()
  getHello(): string {
    return 'Hello, NestJS!';
  }
}

Wsparcie dla TypeScript

TypeScript to statycznie typowany nadzbiór JavaScript, a NestJS w pełni go wykorzystuje. Dzięki temu możesz pisać czysty, bezpieczny typowo kod, który wyłapuje błędy w czasie kompilacji, usprawniając proces tworzenia.

TypeScript oferuje m.in. interfejsy i sprawdzanie typów, co przydaje się przy definiowaniu struktur danych i kontraktów między częściami aplikacji. Zapewnia to spójne, jednoznacznie zdefiniowane dane w całym projekcie.

Wstrzykiwanie zależności

Dependency Injection to wzorzec projektowy używany w NestJS do zarządzania zależnościami komponentów i poprawy testowalności kodu. W skrócie, wstrzykiwanie zależności polega na dostarczaniu komponentowi (np. kontrolerowi lub innemu serwisowi) potrzebnych zależności (serwisów lub obiektów) zamiast tworzenia ich bezpośrednio w nim. To sprzyja ponownemu wykorzystaniu kodu i separacji odpowiedzialności.

W NestJS możesz tworzyć serwisy enkapsulujące konkretne funkcjonalności aplikacji. Następnie wstrzykniesz je do kontrolerów lub innych serwisów, co wspiera modułowość kodu. Oto przykład serwisu oraz sposobu wstrzyknięcia go do kontrolera:


// cats.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class CatsService {
  private readonly cats: string[] = [];

  create(cat: string): void {
    this.cats.push(cat);
  }

  findAll(): string[] {
    return this.cats;
  }
}

// cats.controller.ts
import { Controller, Post, Get, Body } from '@nestjs/common';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() cat: string) {
    this.catsService.create(cat);
  }

  @Get()
  async findAll(): Promise<string[]> {
    return this.catsService.findAll();
  }
}

W tym przykładzie CatsService enkapsuluje logikę zarządzania listą kotów. Ten serwis jest następnie wstrzykiwany do CatsController, co pozwala kontrolerowi korzystać z udostępnianej funkcjonalności.

Dekoratory

Dekoratory to potężna funkcja w NestJS, pozwalająca definiować metadane i tworzyć różne dekoratory do obsługi routingu, walidacji i innych funkcjonalności. To upraszcza organizację kodu i zwiększa jego czytelność.

@Controller: 

Dekorator @Controller służy do definiowania klasy kontrolera. Określa bazową ścieżkę dla wszystkich tras zdefiniowanych w tym kontrolerze.

@Get, @Post, @Put, @Delete: 

Te dekoratory wykorzystuje się w klasach kontrolerów do określania metod HTTP i tras powiązanych z metodami kontrolera. Na przykład @Get() definiuje trasę GET, a @Post() definiuje trasę POST.

@Param, @Query, @Body: 

Te dekoratory służą do pobierania parametrów ścieżki, parametrów zapytania i ciała żądania w metodach kontrolera. Ułatwiają pozyskiwanie i przetwarzanie danych.

@Injectable: 

Dekorator @Injectable() służy do oznaczania klasy jako providera lub serwisu, który można wstrzyknąć do innych komponentów, takich jak kontrolery czy inne serwisy.

Pierwsze kroki z NestJS

Przejdźmy krok po kroku do uruchomienia projektu w NestJS:

1.Instalacja: Zainstaluj NestJS globalnie za pomocą npm lub yarn:


npm install -g @nestjs/cli
# OR
yarn global add @nestjs/cli

2.Utwórz nowy projekt: Użyj Nest CLI, aby utworzyć nowy projekt NestJS:


nest new project-name

To polecenie wygeneruje strukturę projektu i zainstaluje wymagane zależności.

Poznaj strukturę: Po utworzeniu projektu przejdź do jego katalogu. Znajdziesz tam dobrze uporządkowaną strukturę z folderami takimi jak controllers, modules, services i inne.

3.Utwórz pierwszy moduł: Stwórz moduł, kontroler i serwis. To kluczowe komponenty w NestJS:


nest generate module module-name // nest g m module-name
nest generate controller controller-name // nest g c controller-name
nest generate service service-name // nest g s controller-name

Albo skorzystaj ze skrótów

nest g m module-name
nest g c controller-name
nest g s controller-name

Zastąp module-name, controller-name i service-name sensownymi nazwami dopasowanymi do Twojego projektu.

4.Zdefiniuj trasy: W kontrolerze użyj dekoratorów takich jak @Get(), @Post() i innych, aby zdefiniować trasy. Logikę biznesową zaimplementuj w serwisie.

5.Uruchom aplikację: Wystartuj aplikację NestJS poleceniem:

npm run start
# OR
yarn start

Domyślnie aplikacja NestJS nasłuchuje na porcie 3000.

6. Przetestuj API: Otwórz przeglądarkę lub użyj narzędzi takich jak Postman, aby przetestować endpointy API. Na przykład, jeśli w kontrolerze masz zdefiniowaną trasę GET, możesz uzyskać do niej dostęp pod adresem http://localhost:3000/controller-route.

Podsumowanie

NestJS to potężny framework, który upraszcza rozwój w Node.js, zapewniając uporządkowany i wydajny sposób tworzenia aplikacji po stronie serwera. Niezależnie od tego, czy dopiero zaczynasz pracę z Node.js, czy jesteś doświadczonym programistą, warto poznać NestJS. Dzięki wskazówkom z tego artykułu jesteś gotów rozpocząć przygodę z NestJS. Powodzenia w kodowaniu!

FAQ

Czym jest NestJS?

NestJS to progresywny framework Node.js do tworzenia wydajnych, skalowalnych aplikacji po stronie serwera.

Na czym polega architektura MVC w NestJS?

MVC dzieli aplikację na Model, View i Controller, co sprzyja organizacji kodu i łatwiejszemu utrzymaniu.

Jakie korzyści daje TypeScript w NestJS?

TypeScript zapewnia bezpieczeństwo typów, podnosząc jakość kodu i wyłapując błędy na etapie kompilacji.

Czym jest wstrzykiwanie zależności w NestJS?

Wstrzykiwanie zależności zarządza zależnościami komponentów, wspierając ponowne użycie kodu i separację odpowiedzialności.

Czym są moduły i providers w NestJS?

Moduły porządkują aplikację na części, a providers to wstrzykiwalne klasy używane do definiowania logiki biznesowej.

Jak utworzyć nowy projekt NestJS?

Użyj nest new project-name, aby wygenerować strukturę projektu za pomocą Nest CLI.

Czym są dekoratory w NestJS?

Dekoratory służą do definiowania metadanych i upraszczają organizację kodu, np. routing przy pomocy @Get() i @Controller.

Jak uruchomić moją aplikację NestJS?

Uruchom npm run start lub yarn start; domyślnie aplikacja nasłuchuje na porcie 3000.

Jak testować endpointy API w NestJS?

Skorzystaj z narzędzi takich jak Postman lub przeglądarka, odwiedzając odpowiednie adresy URL.

Czy mogę tworzyć własne dekoratory w NestJS?

Tak, możesz tworzyć własne dekoratory, aby dodawać funkcje lub metadane do kodu.

Jaką rolę pełni dekorator @Injectable()?

Dekorator @Injectable() oznacza klasę jako providera, dzięki czemu może być wstrzykiwana do innych komponentów.

Jak definiować trasy w kontrolerach NestJS?

Używaj dekoratorów takich jak @Get(), @Post() itd. w klasach kontrolerów.

Czy NestJS nadaje się zarówno dla początkujących, jak i doświadczonych programistów?

Tak, NestJS jest odpowiedni dla osób na każdym poziomie, oferując uporządkowany i wydajny proces tworzenia.

Czy NestJS nadaje się do tworzenia RESTful API?

Tak, NestJS świetnie sprawdza się przy budowie RESTful API dzięki routingowi i dekoratorom.

Jakie bazy danych są kompatybilne z NestJS?

NestJS obsługuje różne bazy, w tym MySQL, PostgreSQL, MongoDB i inne, m.in. poprzez biblioteki takie jak TypeORM.

Czy NestJS nadaje się do aplikacji czasu rzeczywistego?

Tak, można go używać do aplikacji real-time, integrując biblioteki WebSocket, np. Socket.io.

Czy NestJS wspiera architekturę mikroserwisów?

Tak, NestJS wspiera mikroserwisy i pozwala budować systemy rozproszone.

Czy mogę używać NestJS z frameworkiem frontendowym, takim jak Angular?

Tak, NestJS może służyć jako backend dla aplikacji Angular, zapewniając płynną integrację.

Czy są oficjalne wtyczki lub rozszerzenia do NestJS?

Tak, NestJS ma aktywną społeczność i oferuje oficjalne oraz społecznościowe wtyczki i rozszerzenia.

Gdzie znajdę dokumentację i poradniki do NestJS?

Obszerną dokumentację i tutoriale znajdziesz na oficjalnej stronie NestJS oraz na forach społeczności.


 

Opublikowany 14 listopada 2023

Udostępnij


Viktor Kharchenko

Node.js Developer

Digital Transformation Strategy for Siemens Finance

Cloud-based platform for Siemens Financial Services in Poland

See full Case Study
Ad image
Jak zacząć z NestJS: nowoczesny framework dla Node.js
Nie przegap żadnego artykułu - zapisz się do naszego newslettera
Zgadzam się na otrzymywanie komunikacji marketingowej od Startup House. Kliknij, aby zobaczyć szczegóły

Może Ci się również spodobać...

Business team analyzing smart locker monetization strategy
Software development

Abstrakcja w programowaniu

Poznaj istotę abstrakcji w programowaniu — jej znaczenie, rodzaje i zastosowania w praktyce. Od upraszczania złożonych systemów po ułatwianie współpracy, abstrakcja to filar tworzenia oprogramowania, który kształtuje sposób, w jaki piszemy kod.

Marek Majdak

06 cze 20235 min czytania

Jak opanować refaktoryzację kodu: wskazówki i techniki
Software development

Jak opanować refaktoryzację kodu: wskazówki i techniki

Refaktoryzacja kodu to kluczowy proces w rozwoju oprogramowania, przypominający rewitalizację starego miasta, aby dostosować je do współczesnych potrzeb. Polega na przebudowie istniejącego kodu bez zmiany jego zewnętrznego zachowania, by poprawić czytelność, zmniejszyć złożoność i ułatwić utrzymanie. To niezbędne, by zachować elastyczność i efektywność pracy nad bazą kodu oraz zapobiegać narastaniu długu technicznego. W artykule omawiamy znaczenie, metody i dobre praktyki refaktoryzacji kodu, pokazując, jak skutecznie porządkować i optymalizować kod z myślą o długoterminowym utrzymaniu i rozwoju.

Marek Majdak

07 gru 202311 min czytania

Modern digital finance concept showing a secure fintech platform with mobile banking, blockchain, and AI-powered analytics integrated into financial services.
Software architectureSoftware development

Zasada pojedynczej odpowiedzialności

Single Responsibility Principle (SRP), czyli zasada jednej odpowiedzialności, to podstawowa koncepcja w inżynierii oprogramowania, zgodnie z którą każda klasa czy moduł ma tylko jeden powód do zmiany. Zapewnia to większą czytelność, łatwiejsze utrzymanie i skalowalność kodu, bo każdy komponent ma wyraźny, pojedynczy zakres odpowiedzialności. Stosowanie SRP prowadzi do modułowej bazy kodu, którą łatwiej zrozumieć, testować i modyfikować. To kluczowa praktyka w budowaniu solidnych, wydajnych systemów i ważny element tworzenia oprogramowania wysokiej jakości. Przyjęcie SRP wyraźnie poprawia strukturę i funkcjonalność kodu, co przekłada się na bardziej udane i długofalowo łatwe w utrzymaniu projekty.

Marek Majdak

08 lis 20235 min czytania

Gotowy, aby scentralizować swoje know-how z pomocą AI?

Rozpocznij nowy rozdział w zarządzaniu wiedzą — gdzie Asystent AI staje się centralnym filarem Twojego cyfrowego wsparcia.

Umów bezpłatną konsultację

Pracuj z zespołem, któremu ufają firmy z czołówki rynku.

Rainbow logo
Siemens logo
Toyota logo

Budujemy to, co będzie dalej.

Firma

Branże

Startup Development House sp. z o.o.

Aleje Jerozolimskie 81

Warszawa, 02-001

VAT-ID: PL5213739631

KRS: 0000624654

REGON: 364787848

Kontakt

hello@startup-house.com

Nasze biuro: +48 789 011 336

Nowy biznes: +48 798 874 852

Obserwuj nas

Award
logologologologo

Copyright © 2026 Startup Development House sp. z o.o.

UE ProjektyPolityka prywatności