Opis kursu
- Płacisz za jeden miesiąc nauki.
- Uczysz się tak długo, jak potrzebujesz.
- Pełne wsparcie na każdym etapie nauki.
- Pytasz o wszystko, tyle razy, ile potrzebujesz i wtedy, kiedy chcesz. Szybko otrzymasz odpowiedź.
- Spotkania 1:1 online + nagranie ze spotkania.
- Plan nauki dopasowany do Ciebie.
- Dużo zadań i projektów praktycznych.
- Stały feedback na Twój kod i strukturę projektów.
- Uczysz się w swoim tempie.
- Motywuję Cię do pracy i dbam o Twoje postępy.
- Portfolio w kilka miesięcy.
- Szukasz pracy w trakcie kursu.
- Otrzymasz certyfikat ukończenia kursu.
Już teraz
zapisz się na kurs
- Kurs JavaScript / TypeScript Fullstack
Plan kursu
Kurs jest przeznaczony dla osób, które mają podstawową wiedzę z HTML, CSS i chcą pójść krok dalej, ucząc się JavaScript oraz TypeScript – od podstaw po zaawansowane, komercyjne rozwiązania. Od początku stawiam na praktykę. Tworzysz realne aplikacje z wykorzystaniem HTML, CSS, JavaScript, TypeScript i Vite. Jeszcze przed wprowadzeniem React-a przygotujesz kilkanaście przykładowych interfejsów graficznych, które w dalszych etapach rozwiniesz, dodając kolejne funkcjonalności i potem dodasz kolejne aplikacje do swojego portfolio. Jeśli wcześniej uczyłeś się ze mną backend-u i tworzenia REST API, w tym kursie możesz kontynuować swoją ścieżkę i rozwijać się jako fullstack developer.
W tej sekcji poznasz zestaw narzędzi, z których będziemy korzystać do tworzenia nowoczesnych aplikacji w JavaScript i TypeScript. Dowiesz się, jak przebiegają kolejne etapy budowania programów w tych językach, oraz wybierzesz wygodne, nowoczesne środowisko IDE dopasowane do Twojej pracy. Zobacz pierwsze minuty naszej wspólnej nauki
- V8, Node
- Alternatywy Node (Deno, Bun)
- Etapy budowania programu napisanego w JavaScript (JIT, parsing, AST)
- Wersje JavaScript
- Porównanie JavaScript oraz TypeScript
- Przegląd IDE
- Przygotowanie środowiska programistycznego
W tej sekcji poznasz podstawy JavaScript – fundament, bez którego trudno rozpocząć tworzenie praktycznych aplikacji do swojego portfolio. To wprowadzenie przygotuje Cię do dalszej nauki, a omawiane tu zagadnienia będziemy pogłębiać w kolejnych modułach.
- Zmienne, stałe, literały, let, const
- Konwencje nazewnicze
- Typowanie dynamiczne
- Przegląd typów danych prostych i złożonych
- Liczby, Number
- Napisy
- Różnica między null oraz undefined
- Falsy, truthy
- Sprawdzanie rodzaju typu
- Operatory (arytmetyczne, logiczne, relacji, nullish coalescing, podwójna negacja, chaining, spread i inne)
- Math
- Instrukcje warunkowe, pętle, break, continue
- Wprowadzenie do obiektów (w tym do tablic)
- Konwersje pomiędzy obiektami różnych typów
- Kopiowanie płytki oraz głębokie
- Organizacja pamięci w aplikacji JavaScript
- Rzucanie i obsługa wyjątków
W tej sekcji poznasz narzędzia, które pozwolą Ci sprawnie budować i zarządzać strukturą projektu. Nauczysz się korzystać z npm, npx i Vite, aby usprawnić pracę i przyspieszyć proces tworzenia aplikacji. Jeśli zajdzie taka potrzeba, omówimy również Webpack. To właśnie tutaj przygotujesz szablon projektu, który posłuży jako baza dla Twoich pierwszych aplikacji w portfolio.
- npm, npx
- Vite
- Webpack (opcjonalnie)
- CommonJS, ESM
- Omówienie struktury projektu utworzonego za pomocą Vite
- Zarządzanie projektem utworzonym za pomocą Vite
- Instalacja i zarządzanie dependencies
W tej sekcji stworzysz swoje pierwsze projekty do portfolio. W pełni wykorzystamy dotychczas zdobytą wiedzę i rozpoczniemy pracę nad programami w konfiguracji JavaScript + HTML + CSS + Vite. Od samego początku pracujemy z DOM. Przykładowe aplikacje, które tutaj zrealizujemy, to: Kalkulator cen VAT Panel rejestracji i logowania Na bazie tych projektów, z moją pomocą, będziesz mógł tworzyć kolejne aplikacje. Od początku zadbam o to, aby Twoje portfolio było atrakcyjne i przyciągało uwagę potencjalnych pracodawców.
Najwyższa pora wprowadzić funkcje. Nasze programy stają się coraz bardziej rozbudowane, a funkcje pozwolą uporządkować kod i podzielić go na mniejsze, logiczne fragmenty. To podstawa każdej aplikacji – dzięki nim kod staje się czytelniejszy, łatwiejszy w utrzymaniu i możliwy do ponownego wykorzystania w innych częściach projektu.
- Function declaration
- Parametry / argumenty funkcji
- Function expression
- Anonymous function
- Arrow function
- IIFE
W tej sekcji stworzysz kolejne projekty do portfolio, w których wykorzystasz funkcje. Dodasz je również do wcześniej napisanych programów, aby uczynić kod jeszcze bardziej profesjonalnym. Przykładowa aplikacja, którą tutaj zrealizujemy, to: Walidacja formularza Na bazie tych projektów, z moją pomocą, będziesz mógł tworzyć kolejne aplikacje i rozwijać swoje portfolio.
Znasz już podstawy JavaScript i potrafisz wykorzystywać go w swoich projektach. To idealny moment, aby wprowadzić TypeScript i równolegle z zagadnieniami JavaScript pokazywać jego możliwości. Od tej chwili będziesz używać TypeScript także w swoich projektach, co sprawi, że Twoje portfolio stanie się jeszcze bardziej wartościowe i profesjonalne.
- Dlaczego używamy TypeScript?
- Konfiguracja projektu Vite + TypeScript
- Plik tsconfig.json
- Etapy kompilacji TypeScript
- Typowanie statyczne
- Wykaz podstawowych typów
- Określanie typu obiektów
- Typ any
- Tuple
- Unie
- Określanie typu parametrów i typu zwracanego funkcji
- Budowanie typów złożonych za pomocą type
- Utility types
- Enum, as const, enum as const
- Typy unknown, never
- Typy intersekcyjne
- Type guards
- Function overloads
W tej sekcji stworzysz kolejne projekty do portfolio, w których wykorzystasz TypeScript. Przykładowe aplikacje, które tutaj zrealizujemy, to: Quiz Konwerter jednostek Na bazie tych projektów, z moją pomocą, będziesz mógł tworzyć kolejne aplikacje i rozwijać swoje portfolio.
W tej sekcji kontynuujemy temat funkcji, poznając wzorce, które wykorzystują ich możliwości do tworzenia czytelniejszego i lepiej zorganizowanego kodu.
- Factory function
- Closures
- Constructor function
W tej sekcji stworzysz kolejne projekty do portfolio, w których wykorzystasz TypeScript i funkcje. Przykładowa aplikacja, którą tutaj zrealizujemy, to: Generator haseł Na bazie tych projektów, z moją pomocą, będziesz mógł tworzyć kolejne aplikacje i rozwijać swoje portfolio.
W tej sekcji szczegółowo omówimy tablice. Poznałeś je i używałeś już wcześniej, jednak teraz sięgniemy po pełen zakres możliwości, jakie JavaScript oferuje w pracy z tablicami.
- Klasa Array
- Sposoby tworzenia tablic
- Dostęp do elementów tablic
- Filtrowanie
- Mapowanie
- Sortowanie
- Grupowanie
- Redukcja
- Przegląd pozostałych operacji na tablicach
- Tablice wielowymiarowe
- Klasa String
- Właściwości napisów
- Różne rodzaje napisów – wielowierszowe, raw strings
- Sposoby tworzenia napisów
- Kodowanie napisów
- Zarządzanie napisem jako tablicą znaków
- Porównywanie napisów
- Parsowanie
- Wyrażenia regularne
- Wykorzystanie wyrażeń regularnych podczas pracy z napisami
Kolejne sekcje pochodzą ze starszej wersji kursu. Możesz je realizować od razu, w międzyczasie będę stopniowo zastępował je nowymi lekcjami, tak aby cały kurs był spójny i jeszcze bardziej praktyczny. Dzięki temu możesz zacząć naukę już teraz, korzystając z aktualnych materiałów i płynnie przejść do świeżo dodanych treści, gdy tylko się pojawią.
- Omówienie założeń programowania obiektowego
- Obiekty jako rekordy oraz jako słowniki
- Tworzenie obiektu z wykorzystaniem notacji literału
- Tworzenie obiektu z wykorzystaniem konstruktora
- Zarządzanie właściwościami obiektu
- Dynamiczne wyznaczanie nazwy klucza / właściwości w obiekcie
- Zarządzanie atrybutami właściwości
- Wykorzystanie operatora spread do pracy z obiektami
- Definiowanie metody w obiekcie
- Przegląd wbudowanych metod obiektu
- Przesłanianie metod wbudowanych
- Sposoby kopiowania obiektów
- Zarządzanie tablicą obiektów
- Przegląd metod klasy Object
- Właściwość __proto__
- Tworzenie klasy z wykorzystaniem podejścia class declaration
- Tworzenie klasy z wykorzystaniem podejścia class expression
- Pola składowe w klasie
- Metody składowe w klasie
- Sposoby definiowania składników prywatnych klasy
- Konstruktory
- Składniki i bloki statyczne
- Dziedziczenie
- Słowo kluczowe super
- Przesłanianie metod w klasach pochodnych
- Prototypy w kontekście dziedziczenia
- Symulowanie dziedziczenia wielokrotnego – mixin classes
- Zarządzanie this w pracy z klasami oraz obiektami
- Przykłady użycia metod call oraz bind
- Zagadnienia uzupełniające
- Omówienie hierarchii kolekcji
- Wzorzec projektowy iterator
- Zarządzanie obiektami klasy Array – przypomnienie
- Pętle for-of oraz for-await-of w pracy z kolekcjami
- Zarządzanie obiektami klasy ArrayBuffer
- Widoki klasy ArrayBuffer: Typed Array oraz DataView
- Konwersje pomiędzy Typed Array oraz zwykłą tablicą
- Łączenie kilku obiektów Typed Array
- Tworzenie i zarządzanie obiektami typu Map
- Konwersja pomiędzy mapą oraz obiektem
- Tworzenie i zarządzanie obiektami typu WeakMap
- Implementowanie mechanizmu cache za pomocą typu WeakMap
- Zarządzanie prywatnymi składnikami klasy za pomocą typu WeakMap
- Tworzenie i zarządzanie obiektami typu Set
- Unia, intersekcja oraz różnica kolekcji typu Set
- Tworzenie i zarządzanie obiektami typu WeakSet
- Mechanizm destrukturyzacji w pracy z kolekcjami
- Uzupełnienie wiadomości o generatorach
Zagadnienia uzupełniające
- Omówienie założeń programowania asynchronicznego
- Event loop
- Callbacks
- Zdarzenia jako jeden z mechanizmów asynchroniczności
- Typ Promise
- Metody resolve oraz reject
- Metody then oraz catch
- Omówienie stanów obiektu typu Promise
- Sposoby zwracania danych z poziomu obiektu typu Promise
- Rzucanie wyjątków przez obiekt typu Promise
- Implementacja funkcji asynchronicznych w oparciu o typ Promise
- Wywołania kaskadowe bytów asynchronicznych
- Promise.all
- Implementacja mechanizmu fork-join z wykorzystaniem Promise.all
- Słowa kluczowe async oraz await
- Natychmiastowe wywołania asynchronicznych funkcji strzałkowych
- Sekwencyjne wywołania funkcji asynchronicznych
- Słowa kluczowe async oraz await w pracy z Promise.all
- Generatory asynchroniczne
- Iteracja asynchroniczna uzupełnienie
- Przykłady użycia funkcji fetch
- Konwersja funkcji callback do funkcji opartych o typ Promise
- Używanie słowa kluczowego await w głównym skrypcie aplikacji
- Zagadnienia uzupełniające
- Klasyfikacja sposobów dzielenia kodu aplikacji
- Skrypty
- Moduły CommonJS oraz AMD
- Moduły ECMAScript
- Named exports oraz named imports
- Importowanie z wykorzystaniem przestrzeni nazw
- Różne sposoby wykorzystania mechanizmu default exports
- Default imports
- Moduły zewnętrzne oraz narzędzie npm
- Konwencje nazywania modułów
- Module specifiers
- Dynamiczne ładowanie modułów – operator import()
- Omówienie właściwości import.meta
- Polyfills
- Zagadnienia uzupełniające
- Interpretacja strony internetowej jako model DOM
- Sposoby uzyskiwania dostępu do elementów modelu DOM
- Przetwarzanie elementów modelu DOM
- Zarządzanie kolekcją węzłów elementów typu NodeList
- Poruszanie się po drzewie elementów modelu DOM
- Problem węzłów znaku odstępu
- Elementy równorzędne, potomne, nadrzędne
- Zarządzanie węzłami tekstowymi elementów modelu DOM
- Zarządzanie węzłami atrybutów elementów modelu DOM
- Zarządzanie zawartością HTML elementów w modelu DOM
- Dodawanie elementów do modelu DOM
- Usuwanie elementów z modelu DOM
- Zagadnienia uzupełniające
- Klasyfikacja typów zdarzeń
- Przepływ zdarzeń w DOM
- Różne sposoby obsługi zdarzeń
- Obserwatory zdarzeń
- Przechwytywanie zdarzeń a różne wersje przeglądarek
- Przekazywanie parametrów do metod obsługi zdarzeń
- Przepływ zdarzeń
- Zarządzanie obiektem zdarzenia
- Delegacja zdarzeń
- Zmiana zachowania domyślnego elementu DOM
- Zatrzymanie procesu propagowania zdarzenia
- Obsługa zdarzeń generowanych przez urządzenia wskazujące
- Obsługa zdarzeń generowanych przez klawiaturę
- Obsługa zdarzeń generowanych przez przeglądarkę
- Obsługa zdarzeń generowanych przez formularz sieciowy
- Obsługa zdarzeń generowanych przez zmiany w modelu DOM
- Obsługa innych rodzajów zdarzeń
- Zagadnienia uzupełniające
- Walidacja formularza
- Implementacja klienta REST API
- Local storage oraz session storage
- Przykłady innych bibliotek zewnętrznych
- Zagadnienia uzupełniające
- Interfejsy
- Typy indeksowalne
- Rozszerzanie interfejsów przez inne interfejsy oraz klasy
- Typy hybrydowe
- Klasa oraz jej składniki
- Blok statyczny w klasie
- Enkapsulacja
- Dziedziczenie
- Przesłanianie metod
- Słowo kluczowe override
- Klasy abstrakcyjne
- Typy generyczne
- Interfejsy generyczne
- Generyczne typy funkcyjne
- Klasy generyczne
- Konkretyzacja typów generycznych
- Ograniczenia konkretyzacji typów generycznych
- Aliasy
- Mapped type
- Typy warunkowe
- Typ Symbol
- Iteratory
- Generatory
- Modułowość – eksportowanie, importowanie, default export, opcjonalne ładowanie modułów
- Przestrzenie nazw
- Dekoratory
- Implementacja własnych dekoratorów
- Praktyczne przykłady wykorzystanie dekoratorów
- Mixins
- Przegląd innych typów wbudowanyc
- Omówienie struktury i zasady działania biblioteki React
- Omówienie zasady działania aplikacji SPA
- Przegląd wersji biblioteki React
- Omówienie zasady działania aplikacji SPA
- Przygotowanie aplikacji do pracy z biblioteką React
- Omówienie składni JSX
- Tworzenie pierwszego komponentu
- Konfiguracja aplikacji React do pracy z TypeScript
- Konteneryzacja aplikacji React do pracy w trybie developerskim oraz w trybie produkcyjnym
- Zagadnienia uzupełniające
- Tworzenie komponentu jako klasa
- Tworzenie komponentu jako funkcja
- Dynamiczne parametry komponentu – props
- Stan komponentu
- Modyfikacja stanu za pomocą metody setState
- Wyjaśnienie problemu wskazania this w komponencie
- Zagnieżdżanie komponentów
- Higher Order Component
- Zarządzanie elementami zagnieżdżonymi – React.Children
- Identyfikacja zagnieżdżonych komponentów
- Omówienie cyklów życia komponentu
- Metody cyklu życia komponentu w zarządzaniu stanem komponentu
- Tworzenie komponentu na podstawie tablicy danych
- Komponenty prezentacyjne oraz komponenty logiki
- Zagadnienia uzupełniające
- Komponenty kontrolowane
- Komponenty niekontrolowane
- Dynamicznie generowane pól formularza
- Praca ze zdarzeniami formularza
- Wykorzystanie stanu komponentu do pracy z formularzem
- Walidacja elementów formularza
- Osadzanie informacji o błędach walidacji w formularzu
- Obsługa plików z wykorzystaniem chmury
- Przygotowanie danych formularza do pracy z backendem
- Komunikacja HTTP ze zdalnym API
- Zagadnienia uzupełniające
- Klasyfikacja sposobów zarządzania stanem aplikacji
- Struktura i zasada działania architektury Flux
- Redux jako implementacja architektury Flux
- Konfiguracja aplikacji do pracy z Redux
- Store
- Akcje
- Reducery
- Selektory
- Podłączenie mechanizmów Redux do aplikacji React
- Zarządzanie wywoływaniem akcji za pomocą Redux Thunk
- Komunikacja HTTP z API za pomocą Redux Thunk
- Implementacja Higher Order Reducer
- Implementacja Higher Order Action Creator
- Zarządzanie stanem aplikacji z wykorzystaniem Context API
- Wprowadzenie do mechanizmu React Hooks
- Konfiguracja stanu dla komponentów funkcyjnych
- Funkcja useState
- Funkcja useEffect
- Funkcja useRef
- Funkcja useReducer
- Funkcja useCallback
- Funkcja useMemo
- Funkcja useContext
- Dobre praktyki wykorzystania mechanizmu React Hooks
- Implementacja własnych hooks
- Implementacja formularza z wykorzystaniem React Hooks
- Dynamiczna wersja formularza z wykorzystaniem React Hooks
- Komunikacja HTTP z API za pomocą React Hooks
- Biblioteka react-use
- Biblioteka react-hook-form
- Biblioteka react-fetch-hook
- Biblioteka react-use-form-state
- Biblioteka Formik
- Biblioteka Hook Router
- Biblioteka use-http
- Rozpoznawanie mowy z wykorzystaniem biblioteki react-speech-recognition
- Prezentacja innych bibliotek do pracy z React Hooks
- Zagadnienia uzupełniające
- Konfiguracja aplikacji do pracy z React Router
- Podejście deklaratywne budowania routingu
- Nawigacja pomiędzy komponentami w aplikacji React
- Odczytywanie parametrów z URL
- Routing zagnieżdżony
- Implementowanie przekierowań w kodzie aplikacji React
- Implementacja routingu dla błędu http 404
- Wykorzystanie React Hooks do implementacji routingu (useParams, useLocation, useHistory, useRouteMatch)
- Zagadnienia uzupełniające
- Omówienie mechanizmu autentykacji oraz autoryzacji
- Omówienie standardu JWT
- Sposoby przechowywania tokena po stronie klienta
- Rejestracja użytkowników
- Implementacja mechanizmu logowania
- Zarządzanie tokenami
- Implementacja mechanizmu wylogowania
- Konfiguracja routingu pod kątem bezpieczeństwa aplikacji
- Dostosowanie aplikacji do pracy z użytkownikami o różnych uprawnieniach
- Zagadnienia uzupełniające
- Omówienie zagadnień związanych z testowaniem aplikacji
- Omówienie właściwości frameworka Jest
- Omówienie właściwości biblioteki Enzyme
- Konfiguracja aplikacji React do przeprowadzania testów
- Przedstawienie różnych metod testowania komponentów
- Testowanie właściwości oraz stanu komponentów
- Testowanie stanu reprezentowanego przez framework Redux
- Testowanie mechanizmów implementowanych w ramach Redux Thunk
- Testowanie komunikacji asynchronicznej (fetch, axios)
- Testowanie mechanizmów implementowanych w ramach hooks
- Testowanie kontekstu aplikacji
- Zagadnienia uzupełniające
- Lazy loading komponentów
- Debuggowanie aplikacji opartej o bibliotekę React
- Timery
- Wykorzystanie biblioteki RxJS w aplikacjach React
- React.memo
- React Fragment
- Portale
- React Interceptors
- React-Async
- Zagadnienia uzupełniając
- Architektura i zastosowanie Node.js
- Instalacja potrzebnych komponentów
- Mechanizm Event Driven Code Execution
- Uruchamianie podstawowych skryptów – REPL
- Przygotowanie aplikacji Node.js do pracy z JavaScript ES6+
- Przygotowanie aplikacji Node.js do pracy z TypeScript
- Omówienie systemu modułowości Node.js
- Omówienie wzorca MVC na potrzeby aplikacji webowej
- Cykl życia serwera Node.js – moduł http
- Implementacja serwera Node.js – moduł http
- Implementacja routingu dla serwera Node – moduł http
- Instalacja frameworka Express
- Omówienie zasady działania middleware
- Zarządzanie żądaniami i odpowiedziami http
- Parametry żądań http
- Nagłówki żądań http
- Przetwarzanie ciała żądania
- Implementacja routingu
- Obsługa zasobów statycznych
- Konfiguracja loggerów
- Walidacja danych
- Obsługa błędów
- Zarządzanie sesją oraz cookies
- Konteneryzacja aplikacji webowej (patrz punkt 42)
- Osadzenie aplikacji webowej w chmurze (patrz punkt 43)
- Zagadnienia uzupełniające
- Prezentacja bibliotek do pracy relacyjnymi bazami danych
- Konfiguracja połączenia z bazą danych – mysql2
- Zarządzanie tabelą w bazie danych – mysql2
- Implementacja relacji pomiędzy tabelami – mysql2
- Zarządzanie danymi w bazie danych – mysql2
- Przygotowanie warstwy bazodanowej – mysql2
- Charakterystyka mechanizmu ORM
- Konfiguracja połączenia z bazą danych – Sequelize
- Zarządzanie modelem tabeli w bazie danych – Sequelize
- Migracje – Sequelize
- Walidacja modelu tabeli – Sequelize
- Definiowanie relacji bazodanowych – Sequelize
- Zarządzanie danymi w bazie danych – Sequelize
- Zarządzanie transakcyjnością – Sequelize
- Przygotowanie warstwy bazodanowej – Sequelize
- Przygotowanie warstwy serwisowej do pracy z warstwą bazodanową
- Konfiguracja połączenia z bazą danych – TypeORM
- Zarządzanie modelem tabeli w bazie danych – TypeORM
- Migracje – TypeORM
- Walidacja modelu tabeli – TypeORM
- Definiowanie relacji bazodanowych – TypeORM
- Zarządzanie danymi w bazie danych – TypeORM
- Zarządzanie transakcyjnością – TypeORM
- Praca z Query Builder – TypeORM
- Tworzenie własnych repozytoriów z wykorzystaniem TypeORM
- Przygotowanie warstwy bazodanowej – TypeORM
- Zagadnienia uzupełniające
- Omówienie architektury bazy danych NoSql
- Prezentacja bibliotek do pracy z bazami danych NoSql
- Konfiguracja połączenia z bazą danych NoSql – mongodb
- Przygotowanie modelu do pracy z bazą danych NoSql – mongodb
- Implementacja relacji w bazie danych NoSql – mongodb
- Zarządzanie danymi w bazie danych NoSql – mongodb
- Przygotowanie warstwy bazodanowej – mongodb
- Przygotowanie aplikacji do pracy z mongoose
- Konfiguracja połączenia z bazą danych NoSql – mongoose
- Przygotowanie modelu do pracy z bazą danych NoSql – mongoose
- Implementacja relacji w bazie danych NoSql – mongoose
- Zarządzanie danymi w bazie danych NoSql – mongoose
- Implementacja kompletnej warstwy do komunikacji z bazą danych
- Przygotowanie warstwy bazodanowej – mongoose
- Przygotowanie warstwy serwisowej do pracy z warstwą bazodanową
- Zagadnienia uzupełniające
- Omówienie standardu REST
- Konfiguracja aplikacji Node.js do pracy z REST
- Integracja aplikacji REST z warstwą bazodanową
- Przechwytywanie parametrów oraz ciała żądania HTTP
- Walidacja danych przekazywanych w ciele żądania HTTP
- Implementacja routingu w aplikacji REST
- Implementacja kompletnej aplikacji REST API
- Rejestracja użytkowników w aplikacji REST Node.js
- Osadzenie warstwy security w aplikacji REST Node.js
- Implementacja serwisu do wysyłania wiadomości email
- Zarządzanie zasobami statycznymi w chmurze
- Implementowanie mechanizmu CORS
- Testowanie aplikacji REST Node.js
- Zagadnienia uzupełniające
- Omówienie standardu GraphQL
- Prezentacja różnic pomiędzy standardami REST oraz GraphQL
- Konfiguracja aplikacji Node.js do pracy z GraphQL
- Integracja aplikacji GraphQL z warstwą bazodanową
- Przygotowanie schematu danych dla aplikacji GraphQL
- Zarządzanie queries w aplikacji GraphQL
- Zarządzanie mutations w aplikacji GraphQL
- Wykorzystanie dodatkowych narzędzi GraphQL – np. variables
- Implementacja kompletnej aplikacji GraphQL
- Rejestracja użytkowników w aplikacji GraphQL
- Osadzenie warstwy security w aplikacji GraphQL
- Implementacja serwisu do wysyłania wiadomości email
- Zarządzanie zasobami statycznymi w chmurze
- Implementacja mechanizmu CORS
- Testowanie aplikacji REST Node.js
- Zagadnienia uzupełniające
- Konfiguracja warstwy testującej dla aplikacji webowej
- Instalacja frameworka Mocha do zarządzania uruchamianiem testów
- Instalacja frameworka Chai do zarządzania asercjami
- Instalacja frameworka Sinon do wykorzystywania mocków
- Przygotowanie struktury projektów do pracy z warstwą testującą
- Przegląd i wykorzystanie różnych rodzajów asercji
- Grupowanie testów
- Hooks (akcje wykonywane pomiędzy testami)
- Mockowanie obiektów
- Testy jednostkowe oraz intergacyjne
- Testowanie metod serwisowych
- Testowanie kontrolerów
- Testowanie mechanizmów asynchronicznych
- Przygotowanie warstwy bazodanowej na potrzeby testów
- Testowanie REST API z wykorzystaniem narzędzi zewnętrznych
- Testowanie warstwy security
- Zagadnienia uzupełniające
Ten moduł realizujesz równolegle z kursem – poinformuję Cię, kiedy należy go przerobić
- Omówienie architektury platformy Docker
- Zasada działania obrazu oraz kontenera
- Różnica pomiędzy kontenerem Docker oraz maszyną wirtualną
- Instalacja platformy Docker
- Praca z Docker CLI
- Tworzenie i zarządzanie obrazami platformy Docker
- Image Layers
- Wprowadzenie do pracy z Docker Hub
- Osadzenie przygotowanego obrazu w repozytorium Docker Hub
- Tworzenie i zarządzanie kontenerami w platformie Docker
- Omówienie cyklu życia kontenera
- Kopiowanie plików z maszyny lokalnej do kontenera
- Kopiowanie plików z kontenera do maszyny lokalnej
- Klasyfikacja rodzajów danych przechowywanych w kontenerach
- Tworzenie i zarządzanie volumes w platformie Docker
- Różnica pomiędzy anonymous volumes oraz named volumes
- Tworzenie i zarządzanie bind mounts w platformie Docker
- Omówienie różnic pomiędzy volumes oraz bind mounts
- Tworzenie volumes tylko do odczytu
- Instalacja i uruchamianie przykładowych narzędzi z wykorzystaniem platformy Docker
- Omówienie struktury pliku konfiguracyjnego Dockerfile
- Praca z argumentami oraz zmiennymi środowiskowymi
- Konteneryzacja aplikacji webowej z wykorzystaniem Docker
- Komunikacja kontenera z zewnętrznym REST API
- Komunikacja kontenera z narzędziami osadzonymi w localhost
- Komunikacja container to container z użyciem networks w platformie Docker
- Przegląd sterowników do konfiguracji zachowania networks
- Omówienie zasady działania narzędzia Docker Compose
- Instalacja narzędzia Docker Compose
- Struktura pliku konfiguracyjnego narzędzia Docker Compose
- Przygotowanie kontenera bazy danych
- Konfiguracja kontenerów do pracy z wieloma bazami danych
- Konteneryzacja przykładowej aplikacji
- Przykład tworzenia utility containers
Git to jedno z najważniejszych narzędzi w pracy programisty – pozwala zarządzać kodem, kontrolować zmiany i bezpiecznie rozwijać projekt w zespole. W tym module poznasz również GitHub, czyli platformę, która umożliwia przechowywanie repozytoriów w chmurze, współpracę z innymi programistami oraz prezentowanie swojego kodu potencjalnym pracodawcom. Ten moduł będziesz realizować równolegle z kursem – dam Ci znać w odpowiednim momencie, kiedy warto go przerobić, aby w pełni wykorzystać jego możliwości w swoich projektach.
- Podstawowe informacje na temat systemów kontroli wersji
- Working area, staging area, local / remote repository
- Instalacja Git
- Inicjalizacja repozytorium
- Konfiguracja i personalizacja ustawień Git (3 poziomy konfiguracji)
- Dokumentacja Git
- Struktura katalogu .git
- Plik .gitignore
- Plik .gitattributes
- Śledzenie stanu, porównywanie plików projektu zarządzanego przez Git
- Tworzenie commitów
- Reset, restore, revert
- Prezentowanie informacji na temat commitów
- Hooks
- Tworzenie i zarządzanie gałęziami
- Merge, rebase, squash
- Git Flow, TBD
- Praca zespołowa z wykorzystaniem GitHub
- Clone, push, fetch, pull
- Dobre praktyki przygotowania repozytorium na GitHub
- Struktura pliku README.md
- Praktyczny przykład pracy zespołowej z wykorzystaniem GitHub
- Worktree
- Submodules
- Subtree
- Stash
- Bisect
- Tags
- Inne komendy Git (o których nie wspomniałem w tym opisie, a których użyłem w kursie)
- Praca z Git, GitHub z wykorzystaniem komercyjnego IDE
- Fork
- Tworzenie pull requests
- GitHub Desktop








