Wprowadzenie
NestJS to jeden z najpopularniejszych frameworków do tworzenia serwerowych aplikacji JavaScript, opartych na Node.js. Jego popularność rośnie nie bez powodu – oferuje on solidną strukturę oraz doskonałe wsparcie dla tworzenia aplikacji typu back-end, w sposób modularny i łatwy do zarządzania. W tym wpisie na bloga wprowadzimy Was w świat NestJS, omówimy jego podstawowe koncepty oraz przejdziemy przez proces instalacji i konfiguracji projektu. Dodatkowo, poświęcimy chwilę na poznanie TypeScript, który jest podstawowym językiem używanym w NestJS. Zacznijmy!
Czym jest NestJS i dlaczego warto z niego korzystać?
NestJS to framework oparty na Node.js, który wykorzystuje TypeScript jako główny język programowania. Jego największą zaletą jest modularność oraz wsparcie dla programowania obiektowego, funkcyjnego i reaktywnego, co czyni go wszechstronnym rozwiązaniem do budowania aplikacji. NestJS jest inspirowany architekturą Angulara, co zapewnia mu strukturalną przejrzystość oraz łatwość zarządzania większymi projektami.
NestJS powstał w celu wypełnienia luki pomiędzy prostymi, niskopoziomowymi bibliotekami jak Express.js, a złożonymi frameworkami, które posiadają zbyt strome krzywe nauki. Dzięki niemu, programiści mają możliwość łatwego budowania skalowalnych, modularnych aplikacji, które jednocześnie są zgodne z zasadami dobrej architektury.
Historia powstania i motywacje NestJS
NestJS został stworzony przez Kamila Myśliwieca jako odpowiedź na potrzebę uporządkowanego narzędzia do tworzenia serwerowych aplikacji w Node.js. Motywacją do powstania NestJS było zapewnienie developerom narzędzi, które umożliwią tworzenie bardziej strukturalnych i zorganizowanych aplikacji, szczególnie w dużych projektach, gdzie zarządzanie kodem i jego utrzymanie stanowią spore wyzwanie.
Architektura NestJS: modularność i wstrzykiwanie zależności
NestJS oferuje modularną architekturę, co oznacza, że aplikacje są podzielone na mniejsze, niezależne moduły, które można ponownie wykorzystać. Modularność umożliwia łatwe dodawanie nowych funkcjonalności bez ingerencji w już istniejący kod. Moduły w NestJS grupują powiązane komponenty, takie jak kontrolery, serwisy i repozytoria.
Innym ważnym aspektem architektury NestJS jest wstrzykiwanie zależności (Dependency Injection). Wstrzykiwanie zależności polega na dostarczaniu instancji obiektów do klas w sposób automatyczny, co znacznie ułatwia zarządzanie zależnościami i minimalizuje kod „klejowy”. NestJS korzysta z DI (Dependency Injection), co czyni aplikacje bardziej modularnymi, testowalnymi i łatwymi w utrzymaniu.
Instalacja i konfiguracja NestJS
Instalacja NestJS CLI
NestJS posiada dedykowane CLI, które ułatwia zarządzanie projektem, instalację zależności oraz uruchamianie aplikacji. Aby zainstalować CLI, potrzebujemy Node.js oraz npm (Node Package Manager). Jeśli nie masz zainstalowanego Node.js, możesz pobrać go ze strony Node.js.
Aby zainstalować NestJS CLI, wykonaj poniższe polecenie w terminalu:
npm install -g @nestjs/cli
Po zainstalowaniu CLI możemy stworzyć nowy projekt NestJS, wpisując w terminalu:
nest new my-nestjs-project
CLI poprosi nas o wybranie menedżera pakietów (npm lub yarn), po czym stworzy strukturę projektu. Następnie przejdź do folderu projektu:
cd my-nestjs-project
I uruchom aplikację:
npm run start
Struktura projektu w NestJS
Po stworzeniu projektu możemy zauważyć, że NestJS generuje dla nas już pewną strukturę. Ta struktura opiera się na modułach, kontrolerach oraz serwisach. Oto kilka najważniejszych elementów:
- src/app.module.ts: Główny moduł aplikacji, który zarządza innymi modułami.
- src/app.controller.ts: Kontroler odpowiedzialny za obsługę żądań HTTP.
- src/app.service.ts: Serwis, który może zawierać logikę biznesową aplikacji.
Modularność NestJS pozwala na logiczne grupowanie kodu, co czyni projekt przejrzystym i łatwym do rozbudowy.
Podstawy TypeScript
NestJS bazuje na TypeScript, który jest supersetem JavaScript, co oznacza, że wszystkie zasady JavaScript są dostępne w TypeScript, ale mamy także dostęp do dodatkowych funkcji.
Podstawowe koncepty TypeScript
Typy danych – TypeScript oferuje typowanie statyczne, co oznacza, że możemy przypisywać konkretne typy do zmiennych:
let liczba: number = 5;
let tekst: string = "Witaj, świecie!";
let jestAktywny: boolean = true;
- Klasy i interfejsy – TypeScript pozwala na używanie klas, co znacznie ułatwia pisanie kodu obiektowego:
class Uzytkownik {
imie: string;
wiek: number;
constructor(imie: string, wiek: number) {
this.imie = imie;
this.wiek = wiek;
}
przywitaj(): string {
return `Cześć, nazywam się ${this.imie} i mam ${this.wiek} lat.`;
}
}
Interfejsy służą do definiowania kształtu obiektów:
interface Samochod {
marka: string;
model: string;
rok: number;
}
const mojSamochod: Samochod = {
marka: 'Toyota',
model: 'Corolla',
rok: 2020
};
- Dekoratory – Dekoratory to specjalne funkcje, które pozwalają na modyfikację zachowania klas lub metod. W NestJS są powszechnie używane do wstrzykiwania zależności i określania ról komponentów. Na przykład:
import { Controller, Get } from '@nestjs/common';
@Controller('uzytkownicy')
export class UzytkownikController {
@Get()
znajdzWszystkich(): string {
return 'Znajduję wszystkich użytkowników';
}
}
Różnice pomiędzy TypeScript a JavaScript
TypeScript rozszerza JavaScript, wprowadzając statyczne typowanie, co pomaga uniknąć wielu typowych błędów występujących w dynamicznie typowanym JavaScript. Dzięki TypeScript możemy korzystać z silniejszego typowania, lepszej nawigacji w kodzie oraz narzędzi takich jak automatyczne podpowiedzi w edytorach (IntelliSense), co znacznie przyspiesza i ułatwia proces tworzenia oprogramowania.
Podsumowanie
NestJS to potężny framework do tworzenia aplikacji serwerowych opartych na Node.js, który zapewnia solidną architekturę i modularność. Dzięki wykorzystaniu TypeScript i wstrzykiwaniu zależności, aplikacje stworzone w NestJS są bardziej przewidywalne, łatwiejsze w utrzymaniu i rozwijaniu. W tym wpisie wprowadziliśmy Was w podstawy NestJS, omówiliśmy, jak zainstalować CLI, skonfigurować projekt oraz przyjrzeliśmy się podstawom TypeScript.
W kolejnych częściach bloga zajmiemy się bardziej zaawansowanymi tematami, takimi jak tworzenie modułów, komunikacja z bazą danych oraz middleware. Zachęcamy do dalszej nauki i zastosowania tej wiedzy w praktycznym projekcie