Jak zacząć z NestJS: nowoczesny framework dla Node.js
Viktor Kharchenko
14 lis 2023・5 min czytania
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-nameZastą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 startDomyś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.
Digital Transformation Strategy for Siemens Finance
Cloud-based platform for Siemens Financial Services in Poland


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

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 2023・5 min czytania

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 2023・11 min czytania

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 2023・5 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.




