Node.js w akcji
Book information
Description
Poznaj potencjał Node.js! JavaScript to jeden z niewielu języków programowania w historii, który wzbudzał i wciąż wzbudza tak wiele emocji. Na rynku pojawił się w 1995 roku i od tego czasu: a) był obecny tylko w przeglądarkach, b) był masowo blokowany i c) wieszczono jego koniec… aż do dnia dzisiejszego, kiedy ciężko sobie wyobrazić stronę WWW, która nie korzystałaby z jego możliwości. Współcześnie JavaScript zaczyna także odnosić sukces w aplikacjach działających po stronie serwera. Możesz sobie wyobrazić, że Twoje żądania po stronie serwera obsługuje JavaScript? Nie? Czas to zmienić! Node.js to platforma, która zapewnia najwyższą wydajność dzięki wykorzystywaniu nieblokujących operacji I/O oraz asynchronicznego mechanizmu zdarzeń. Działa na bazie najwydajniejszego silnika obsługującego język JavaScript – V8 (autorstwa firmy Google) – i pozwala programistom osiągać niezwykłe efekty. Zastanawiasz się, jak wykorzystać ten potencjał? Sięgnij po tę książkę i rozpocznij przygodę z Node.js! W trakcie lektury poznasz podstawy programowania na tej platformie, zbudujesz asynchroniczną logikę, wykorzystasz protokoły sieciowe oraz podłączysz się do popularnych baz danych. W kolejnych rozdziałach będziesz mieć niepowtarzalną okazję, by poznać popularne i przydatne biblioteki oraz stworzyć RESTowe API. Na sam koniec dowiesz się, jak wdrożyć aplikację Node.js w środowisku produkcyjnym oraz zaznajomisz się z ekosystemem tej platformy. Brzmi zachęcająco? Dzięki tej książce: poznasz platformę Node.js opanujesz techniki programowania asynchronicznego zbudujesz RESTowe API z wykorzystaniem Node.js wdrożysz Twoją aplikację przekonasz się, jak wydajny może być JavaScript Twój przewodnik po Node.js! Wstęp Przedmowa Podziękowania Mike Cantelon Marc Harter Nathan Rajlich O książce Mapa drogowa Konwencje zastosowane w kodzie i materiały do pobrania Forum Author Online Część I Podstawy Node Rozdział 1. Witamy w Node.js 1.1. Node jest zbudowane w oparciu o JavaScript 1.2. Asynchroniczna i oparta na zdarzeniach: przeglądarka internetowa 1.3. Asynchroniczny i oparty na zdarzeniach: serwer 1.4. Aplikacje DIRT 1.5. Domyślna aplikacja jest typu DIRT 1.5.1. Prosty przykład aplikacji asynchronicznej 1.5.2. Serwer HTTP 1.5.3. Strumieniowanie danych 1.6. Podsumowanie Rozdział 2. Tworzenie aplikacji wielopokojowego czatu 2.1. Ogólny opis aplikacji 2.2. Wymagania aplikacji i konfiguracja początkowa 2.2.1. Obsługa HTTP i WebSocket 2.2.2. Tworzenie struktury plików aplikacji 2.2.3. Wskazanie zależności 2.2.4. Instalacja zależności 2.3. Udostępnianie plików HTML, CSS i kodu JavaScript działającego po stronie klienta 2.3.1. Tworzenie podstawowego serwera plików statycznych Wysyłanie danych pliku i odpowiedzi w postaci błędów Tworzenie serwera HTTP Uruchomienie serwera HTTP 2.3.2. Dodanie plików HTML i CSS 2.4. Obsługa wiadomości czatu za pomocą biblioteki Socket.IO 2.4.1. Konfiguracja serwera Socket.IO Utworzenie logiki połączenia 2.4.2. Obsługa zdarzeń oraz scenariuszy w aplikacji Przypisanie nazwy gościa Dołączanie do pokoju Obsługa żądań zmiany nazwy użytkownika Wysyłanie wiadomości czatu Tworzenie pokoju Obsługa rozłączenia użytkownika 2.5. Użycie kodu JavaScript działającego po stronie klienta do utworzenia interfejsu użytkownika aplikacji 2.5.1. Przekazywanie do serwera wiadomości oraz żądań zmiany pokoju lub nazwy użytkownika 2.5.2. Wyświetlenie w interfejsie użytkownika wiadomości i listy dostępnych pokoi 2.6. Podsumowanie Rozdział 3. Podstawy programowania w Node 3.1. Organizacja i wielokrotne użycie kodu Node 3.1.1. Tworzenie modułu 3.1.2. Dostrajanie tworzenia modułu za pomocą module.exports 3.1.3. Wielokrotne użycie modułów za pomocą katalogu node_modules 3.1.4. Zastrzeżenia 3.2. Techniki programowania asynchronicznego 3.2.1. Użycie wywołań zwrotnych do obsługi zdarzeń jednorazowych 3.2.2. Użycie emitera zdarzeń do obsługi powtarzających się zdarzeń Przykład emitera zdarzeń Udzielanie odpowiedzi na zdarzenie, które powinno wystąpić tylko jednokrotnie Tworzenie emitera zdarzeń — przykład oparty na publikacji i subskrypcji Rozbudowa emitera zdarzeń — przykład obserwatora pliku 3.2.3. Wyzwania pojawiające się podczas programowania asynchronicznego 3.3. Sekwencja logiki asynchronicznej 3.3.1. Kiedy stosować szeregową kontrolę przepływu? 3.3.2. Implementacja szeregowej kontroli przepływu 3.3.3. Implementacja równoległej kontroli przepływu 3.3.4. Użycie narzędzi opracowanych przez społeczność 3.4. Podsumowanie Część II Tworzenie aplikacji sieciowych w Node Rozdział 4. Tworzenie aplikacji sieciowej w Node 4.1. Podstawy dotyczące serwera HTTP 4.1.1. Jak przychodzące żądania HTTP są przez Node przedstawiane programiście? 4.1.2. Prosty serwer HTTP odpowiadający komunikatem „Witaj, świecie” 4.1.3. Odczyt nagłówków żądania i zdefiniowanie nagłówków odpowiedzi 4.1.4. Ustawienie kodu stanu odpowiedzi HTTP 4.2. Tworzenie usługi sieciowej RESTful 4.2.1. Tworzenie zasobów za pomocą żądań POST 4.2.2. Pobieranie zasobów za pomocą żądania GET Zdefiniowanie nagłówka Content-Length 4.2.3. Usunięcie zasobu za pomocą żądania DELETE 4.3. Udostępnianie plików statycznych 4.3.1. Tworzenie serwera plików statycznych Optymalizacja transferu danych za pomocą Stream#pipe 4.3.2. Obsługa błędów serwera 4.3.3. Wyprzedzająca obsługa błędów za pomocą wywołania fs.stat 4.4. Akceptacja danych wejściowych użytkownika przekazanych za pomocą formularza sieciowego 4.4.1. Obsługa wysłanych pól formularza sieciowego Moduł querystring 4.4.2. Obsługa przekazanych plików za pomocą formidable 4.4.3. Sprawdzanie postępu operacji przekazywania plików 4.5. Zabezpieczanie aplikacji dzięki użyciu protokołu HTTPS 4.6. Podsumowanie Rozdział 5. Przechowywanie danych aplikacji Node 5.1. Niewymagający serwera magazyn danych 5.1.1. Magazyn danych w pamięci 5.1.2. Magazyn danych oparty na plikach Utworzenie logiki początkowej Zdefiniowanie funkcji pomocniczej do pobierania zadań Zdefiniowanie funkcji pomocniczej do przechowywania zadań 5.2. System zarządzania relacyjną bazą danych 5.2.1. MySQL Użycie MySQL do utworzenia aplikacji śledzącej wykonywanie zadań Utworzenie logiki aplikacji Tworzenie funkcji pomocniczych odpowiedzialnych za wysyłanie kodu HTML, tworzenie formularzy sieciowych i pobieranie danych z formularzy Dodanie danych za pomocą MySQL Usuwanie danych MySQL Uaktualnienie danych MySQL Pobieranie danych MySQL Generowanie rekordów MySQL Generowanie formularzy HTML Wypróbowanie aplikacji 5.2.2. PostgreSQL Nawiązanie połączenia z PostgreSQL Wstawienie rekordu do tabeli bazy danych Utworzenie zapytania zwracającego wynik 5.3. Bazy danych typu NoSQL 5.3.1. Redis Nawiązywanie połączenia z serwerem Redis Praca z danymi bazy Redis Przechowywanie i pobieranie wartości za pomocą tabeli hash Przechowywanie i pobieranie danych za pomocą listy Przechowywanie i pobieranie danych za pomocą zbiorów Dostarczanie danych za pomocą kanałów Maksymalizacja wydajności Node_Redis 5.3.2. MongoDB Nawiązanie połączenia z MongoDB Uzyskanie dostępu do kolekcji MongoDB Wstawienie dokumentu do kolekcji Uaktualnienie danych za pomocą identyfikatora dokumentu Wyszukiwanie dokumentów Usuwanie dokumentów 5.3.3. Mongoose Otworzenie i zamknięcie połączenia Rejestracja schematu Dodanie zadania Wyszukiwanie dokumentu Uaktualnianie dokumentu Usuwanie dokumentu 5.4. Podsumowanie Rozdział 6. Framework Connect 6.1. Konfiguracja aplikacji Connect 6.2. Jak działa metoda pośrednicząca frameworka Connect? 6.2.1. Metody pośredniczące wyświetlające żądanie 6.2.2. Metoda pośrednicząca udzielająca odpowiedzi w postaci komunikatu „Witaj, świecie” 6.3. Dlaczego kolejność metod pośredniczących ma znaczenie? 6.3.1. Kiedy metoda pośrednicząca nie wywołuje next 6.3.2. Użycie kolejności metod pośredniczących do przeprowadzenia uwierzytelnienia 6.4. Montowanie metody pośredniczącej i serwera 6.4.1. Metody pośredniczące przeprowadzające uwierzytelnianie 6.4.2. Metoda pośrednicząca wyświetlająca panel administracyjny Przetestowanie całości 6.5. Tworzenie konfigurowalnej metody pośredniczącej 6.5.1. Tworzenie konfigurowalnej metody pośredniczącej logger 6.5.2. Tworzenie metody pośredniczącej router 6.5.3. Tworzenie metody pośredniczącej przeznaczonej do przepisywania adresów URL 6.6. Użycie metody pośredniczącej do obsługi błędów 6.6.1. Domyślna obsługa błędów w Connect 6.6.2. Samodzielna obsługa błędów aplikacji 6.6.3. Użycie wielu metod pośredniczących przeznaczonych do obsługi błędów Implementacja metody pośredniczącej hello Implementacja metody pośredniczącej users Implementacja metody pośredniczącej pets Implementacja metody pośredniczącej errorHandler Implementacja metody pośredniczącej errorPage 6.7. Podsumowanie Rozdział 7. Metody pośredniczące frameworka Connect 7.1. Metody pośredniczące przeznaczone do przetwarzania plików cookie, danych żądań i ciągów tekstowych zapytań 7.1.1. cookieParser Podstawowy sposób użycia Zwykłe cookie Podpisane cookie Cookie w formacie JSON Ustawienie cookie wychodzących 7.1.2. bodyParser Podstawowy sposób użycia Przetwarzanie danych JSON Przetwarzanie zwykłych danych formularza sieciowego Przetwarzanie wieloczęściowych danych formularza sieciowego 7.1.3. limit Dlaczego metoda pośrednicząca limit Podstawowy sposób użycia Opakowanie metody pośredniczącej limit 7.1.4. query Podstawowy sposób użycia 7.2. Metody pośredniczące implementujące podstawowe funkcje wymagane przez aplikację sieciową 7.2.1. logger Podstawowy sposób użycia Dostosowanie do własnych potrzeb formatu rejestracji danych Opcje metody pośredniczącej logger 7.2.2. favicon Podstawowy sposób użycia 7.2.3. methodOverride Podstawowy sposób użycia Uzyskanie dostępu do oryginalnej właściwości req.method 7.2.4. vhost Podstawowy sposób użycia Użycie wielu egzemplarzy vhost 7.2.5. session Podstawowy sposób użycia Ustawienie czasu wygaśnięcia ważności sesji Praca z danymi sesji Praca z plikami cookie sesji Magazyn danych sesji 7.3. Metody pośredniczące zapewniające bezpieczeństwo aplikacji sieciowej 7.3.1. basicAuth Podstawowy sposób użycia Przekazanie funkcji wywołania zwrotnego Przekazanie asynchronicznej funkcji wywołania zwrotnego Przykład z użyciem polecenia curl 7.3.2. csrf Podstawowy sposób użycia 7.3.3. errorHandler Podstawowy sposób użycia Komunikat błędu w formacie HTML Komunikat błędu w formacie zwykłego tekstu Komunikat błędu w formacie JSON 7.4. Metody pośredniczące przeznaczone do udostępniania plików statycznych 7.4.1. static Podstawowy sposób użycia Użycie metody static Bezwzględne kontra względne ścieżki dostępu do katalogów Udostępnianie pliku index.html, gdy żądanie dotyczy katalogu 7.4.2. compress Podstawowy sposób użycia Użycie własnej funkcji filtrującej Określenie poziomu kompresji i pamięci 7.4.3. directory Podstawowy sposób użycia Podstawowy sposób użycia 7.5. Podsumowanie Rozdział 8. Framework Express 8.1. Utworzenie szkieletu aplikacji 8.1.1. Globalna instalacja frameworka Express 8.1.2. Generowanie aplikacji 8.1.3. Poznawanie aplikacji 8.2. Konfiguracja frameworka Express i tworzonej aplikacji 8.2.1. Konfiguracja na podstawie środowiska 8.3. Generowanie widoków aplikacji Express 8.3.1. Konfiguracja systemu widoków Zmiana katalogu wyszukiwania Domyślny silnik szablonów Buforowanie widoku 8.3.2. Wyszukiwanie widoku 8.3.3. Udostępnianie danych widokom Tworzenie widoku wyświetlającego listę zdjęć Metody udostępniania danych widokom 8.4. Obsługa formularzy i przekazywania plików 8.4.1. Implementacja modelu zdjęcia 8.4.2. Tworzenie formularza przeznaczonego do przekazywania zdjęć Utworzenie formularza Dodanie trasy dla strony przeznaczonej do przekazywania zdjęć Obsługa wysyłania danych formularza 8.4.3. Wyświetlenie listy przekazanych zdjęć 8.5. Obsługa pobierania zasobów 8.5.1. Tworzenie trasy dla pobierania zdjęć 8.5.2. Implementacja trasy pobierania zdjęcia Rozpoczęcie pobierania przez przeglądarkę Ustawienie nazwy pobieranego pliku 8.6. Podsumowanie Rozdział 9. Zaawansowane użycie frameworka Express 9.1. Uwierzytelnianie użytkowników 9.1.1. Zapisywanie i wczytywanie użytkowników Tworzenie pliku package.json Tworzenie modelu User Zapis użytkownika w bazie danych Redis Zabezpieczanie hasła użytkownika Testowanie logiki odpowiedzialnej za zapis użytkownika Pobieranie danych użytkownika Uwierzytelnianie użytkownika 9.1.2. Rejestrowanie nowego użytkownika Dodanie tras rejestracji Tworzenie formularza rejestracji Udzielanie odpowiedzi użytkownikowi Trwałe przechowywanie komunikatów w sesji Implementacja rejestracji użytkownika 9.1.3. Logowanie zarejestrowanych użytkowników Wyświetlenie formularza logowania Uwierzytelnienie logowania Utworzenie menu dla użytkowników uwierzytelnionych i anonimowych 9.1.4. Metoda pośrednicząca przeznaczona do wczytywania użytkownika 9.2. Zaawansowane techniki routingu 9.2.1. Weryfikacja użytkownika podczas przesyłania treści Utworzenie modelu postu Dodanie tras powiązanych z postami Dodanie strony wyświetlającej listę postów Utworzenie formularza postu Implementacja tworzenia postu 9.2.2. Metoda pośrednicząca charakterystyczna dla trasy Weryfikacja formularza za pomocą metody pośredniczącej przeznaczonej dla trasy Utworzenie elastycznej metody pośredniczącej przeznaczonej do przeprowadzania weryfikacji 9.2.3. Implementacja stronicowania Projektowanie API stronicowania Implementacja metody pośredniczącej przeznaczonej do obsługi stronicowania Użycie stronicowania w trasie Utworzenie szablonu dla łączy mechanizmu stronicowania Dodanie łączy stronicowania w szablonie Włączenie czystych adresów URL dla stronicowania 9.3. Utworzenie publicznego API REST 9.3.1. Projekt API 9.3.2. Dodanie uwierzytelnienia podstawowego 9.3.3. Implementacja routingu Testowanie operacji pobierania danych użytkownika Usunięcie danych wrażliwych użytkownika Dodanie postów Dodanie obsługi wyświetlania listy wpisów 9.3.4. Włączenie negocjacji treści Implementacja negocjacji treści Udzielenie odpowiedzi w postaci XML 9.4. Obsługa błędów 9.4.1. Obsługa błędów 404 Dodanie trasy pozwalającej na udzielenie odpowiedzi informującej o błędzie Tworzenie szablonu dla strony błędu Włączenie metody pośredniczącej 9.4.2. Obsługa błędów Użycie trasy warunkowej do przetestowania stron błędów Implementacja procedury obsługi błędów Utworzenie szablonu strony błędu Włączenie metody pośredniczącej 9.5. Podsumowanie Rozdział 10. Testowanie aplikacji Node 10.1. Testy jednostkowe 10.1.1. Moduł assert Prosty przykład Użycie asercji eqal Użycie asercji notEqual Użycie asercji dodatkowych strictEqual Użycie asercji ok Sprawdzenie, czy zgłaszane komunikaty błędów są poprawne Dodanie logiki przeznaczonej do uruchamiania testów 10.1.2. Framework nodeunit Instalacja nodeunit Testowanie aplikacji Node za pomocą frameworka nodeunit 10.1.3. Mocha Testowanie aplikacji Node za pomocą Mocha Zdefiniowanie konfiguracji i czyszczenie logiki za pomocą zaczepów Mocha Testowanie logiki asynchronicznej 10.1.4. Framework Vows Testowanie logiki aplikacji za pomocą frameworka Vows 10.1.5. Biblioteka should.js Testowanie funkcjonalności modułu za pomocą biblioteki should.js 10.2. Testy akceptacyjne 10.2.1. Tobi Testowanie aplikacji sieciowych za pomocą Tobi 10.2.2. Soda Instalacja frameworka Soda i serwera Selenium Testowanie aplikacji sieciowej za pomocą Soda i Selenium Testowanie aplikacji sieciowej za pomocą Soda i Sauce Labs 10.3. Podsumowanie Rozdział 11. Szablony w aplikacji sieciowej 11.1. Użycie szablonów w celu zachowania przejrzystości kodu 11.1.1. Szablon w akcji Wygenerowanie kodu HTML bez użycia szablonu Wygenerowanie kodu HTML z użyciem szablonu 11.2. Silnik szablonów Embedded JavaScript 11.2.1. Tworzenie szablonu Zmiana znaczenia znaków 11.2.2. Praca z danymi szablonu za pomocą filtrów EJS Filtry obsługujące wybór Filtry przeznaczone do zmiany wielkości znaków Filtry przeznaczone do pracy z tekstem Filtry przeprowadzające sortowanie Filtr map Tworzenie własnych filtrów 11.2.3. Integracja EJS w aplikacji Buforowanie szablonów EJS 11.2.4. Użycie EJS w aplikacjach działających po stronie klienta 11.3. Użycie języka szablonów Mustache wraz z silnikiem Hogan 11.3.1. Tworzenie szablonu 11.3.2. Znaczniki Mustache Wyświetlanie prostych wartości Sekcje: iteracja przez wiele wartości Sekcje odwrócone: domyślny kod HTML, gdy wartość nie istnieje Sekcja lambda: własna funkcjonalność w blokach sekcji Partials: wielokrotne użycie szablonów w innych szablonach 11.3.3. Dostosowanie szablonu Hogan do własnych potrzeb 11.4. Szablony Jade 11.4.1. Podstawy szablonów Jade Podawanie atrybutów znacznika Podanie treści znacznika Zachowanie organizacji dzięki rozwinięciu bloku Umieszczanie danych w szablonach Jade 11.4.2. Logika w szablonach Jade Użycie JavaScript w szablonach Jade Iteracja przez obiekty i tablice Warunkowe wygenerowanie kodu szablonu Użycie poleceń case w Jade 11.4.3. Organizacja szablonów Jade Strukturyzacja wielu szablonów za pomocą ich dziedziczenia Implementacja układu za pomocą poprzedzenia blokiem lub dołączenia bloku Dołączanie szablonu Wielokrotne użycie logiki szablonu za pomocą polecenia mixin 11.5. Podsumowanie Część III Co dalej? Rozdział 12. Wdrażanie aplikacji Node i zapewnienie bezawaryjnego działania 12.1. Hosting aplikacji Node 12.1.1. Serwery dedykowane i VPS 12.1.2. Hosting w chmurze Amazon Web Services Rackspace Cloud 12.2. Podstawy wdrożenia 12.2.1. Wdrożenie z repozytorium Git 12.2.2. Zapewnienie działania aplikacji Node 12.3. Maksymalizacja wydajności i czasu bezawaryjnego działania aplikacji 12.3.1. Zapewnienie działania aplikacji za pomocą Upstart 12.3.2. API klastra — wykorzystanie zalety w postaci wielu rdzeni 12.3.3. Proxy i hosting plików statycznych 12.4. Podsumowanie Rozdział 13. Nie tylko serwery WWW 13.1. Biblioteka Socket.IO 13.1.1. Tworzenie minimalnej aplikacji Socket.IO Wypróbowanie aplikacji 13.1.2. Użycie biblioteki Socket.IO do odświeżenia strony i stylów CSS Wypróbowanie aplikacji 13.1.3. Inne zastosowania dla biblioteki Socket.IO 13.2. Dokładniejsze omówienie sieci TCP/IP 13.2.1. Praca z buforami i danymi binarnymi Dane tekstowe kontra binarne 13.2.2. Tworzenie serwera TCP Zapis danych Odczyt danych Połączenie dwóch strumieni za pomocą socket.pipe Obsługa nieeleganckiego zamknięcia połączenia Zebranie wszystkiego w całość 13.2.3. Tworzenie klienta TCP 13.3. Narzędzia przeznaczone do pracy z systemem operacyjnym 13.3.1. Obiekt process, czyli globalny wzorzec Singleton Użycie process.env do pobierania i ustawiania zmiennych środowiskowych Zdarzenia specjalne emitowane przez obiekt proces Przechwytywanie sygnałów wysyłanych procesowi 13.3.2. Użycie modułu filesystem Przenoszenie pliku Monitorowanie katalogu lub pliku pod kątem zmian Użycie opracowanych przez społeczność modułów fstream i filed 13.3.3. Tworzenie procesów zewnętrznych Buforowanie za pomocą cp.exec Tworzenie poleceń za pomocą interfejsu Stream i cp.spawn Rozkład obciążenia za pomocą cp.fork 13.4. Tworzenie narzędzi powłoki 13.4.1. Przetwarzanie argumentów podanych w powłoce 13.4.2. Praca ze standardowym wejściem i wyjściem Zapis danych wyjściowych za pomocą process.stdout Odczyt danych wejściowych za pomocą process.stdin Rejestracja danych diagnostycznych za pomocą process.stderr 13.4.3. Dodanie koloru do danych wyjściowych Tworzenie i zapis znaków sterujących ANSI Formatowanie koloru tekstu za pomocą ansi.js Formatowanie koloru tła za pomocą ansi.js 13.5. Podsumowanie Rozdział 14. Ekosystem Node 14.1. Dostępne w internecie zasoby dla programistów Node 14.1.1. Node i odniesienia do modułów 14.1.2. Grupy Google 14.1.3. IRC 14.1.4. Zgłaszanie problemów w serwisie GitHub 14.2. Serwis GitHub 14.2.1. Rozpoczęcie pracy z GitHub Konfiguracja Git i rejestracja GitHub Dostarczenie GitHub klucza publicznego SSH 14.2.2. Dodanie projektu do GitHub Utworzenie repozytorium GitHub Konfiguracja pustego repozytorium Git Dodanie plików do repozytorium Git Przekazanie repozytorium Git do serwisu GitHub 14.2.3. Współpraca przez serwis GitHub 14.3. Przekazanie własnego modułu do repozytorium npm 14.3.1. Przygotowanie pakietu 14.3.2. Przygotowanie specyfikacji pakietu 14.3.3. Testowanie i publikowanie pakietu Testowanie instalacji pakietu Dodanie użytkownika npm Publikacja w repozytorium npm 14.4. Podsumowanie Dodatek A Instalacja Node i dodatki opracowane przez społeczność A.1. Instalacja w systemie OS X A.1.1. Instalacja za pomocą Homebrew A.2. Instalacja w systemie Windows A.3. Instalacja w systemie Linux A.3.1. Przygotowania do instalacji w Ubuntu A.3.2. Przygotowania do instalacji w CentOS A.4. Kompilacja Node A.5. Używanie menedżera pakietów Node A.5.1. Wyszukiwanie pakietów A.5.2. Instalacja pakietu A.5.3. Przeglądanie dokumentacji i kodu pakietu Dodatek B Debugowanie Node B.1. Analiza kodu za pomocą JSHint B.2. Dane wyjściowe debugowania B.2.1. Debugowanie za pomocą modułu console Wyświetlanie informacji o stanie aplikacji Dane wyjściowe dotyczące pomiaru czasu Wyświetlanie stosu wywołań B.2.2. Użycie modułu debug do zarządzania danymi wyjściowymi procesu debugowania B.3. Debuger wbudowany w Node B.3.1. Nawigacja po debugerze B.3.2. Analiza i zmiana stanu w debugerze B.4. Inspektor Node B.4.1. Uruchomienie inspektora Node B.4.2. Nawigacja po inspektorze Node B.4.3. Przeglądanie stanu w inspektorze Node Dodatek C Rozszerzenie i konfiguracja frameworka Express C.1. Rozszerzenie frameworka Express C.1.1. Rejestracja szablonów silników C.1.2. Szablony i projekt consolidate.js C.1.3. Frameworki i rozszerzenia Express Express-Expose Express-Resource C.2. Konfiguracja zaawansowana C.2.1. Modyfikacja odpowiedzi JSON C.2.2. Formatowanie odpowiedzi JSON C.2.3. Zaufanie nagłówkom odwrotnego proxy
Similar books
Node.js in Action
2017 · PDF
Node.js in Action
2014 · PDF
Node.js in Action
2013 · EPUB
Node.js in Action
2013 · PDF
Node.js in Action
2014 · ZIP
Node.js in Action
2014 · PDF
Node.js in Action
2013 · PDF
Node.js in Action
2018 · PDF