Bühne frei für Node. js! Dieses Buch ist Ihr umfassender Begleiter für die Arbeit mit der am weitesten verbreiteten und von zahlreichen großen Unternehmen eingesetzten serverseitigen JavaScript-Plattform. An leicht verständlichen Beispielen lernen Sie alle Aspekte von Node. js kennen - von den Grundlagen bis zum Profi-Wissen! Hier finden Sie zahlreiche Tipps und Lösungen zu alltäglichen Problemen in der Webentwicklung. Für die vierte Auflage wurde das Buch umfassend aktualisiert und erweitert.
Aus dem Inhalt:
- Grundlagen und Installation
- Node. js Module verwenden
- Node Package Manager (z. B. NPM, Yarn)
- Erfolgreich arbeiten mit Nest. js
- Asynchrone Programmierung
- Anbindung von Datenbanken
- GraphQL nutzen
- Performance, Testing, Qualitätssicherung
- Skalierbarkeit und Deployment
- Microservices mit Node. js
- Deno kennen lernen
Inhaltsverzeichnis
Materialien zum Buch . . . 23
Geleitwort . . . 25
Vorwort . . . 27
1. Grundlagen . . . 31
1. 1 . . . Die Geschichte von Node. js . . . 33
1. 2 . . . Die Organisation von Node. js . . . 38
1. 3 . . . Versionierung von Node. js . . . 39
1. 4 . . . Vorteile von Node. js . . . 41
1. 5 . . . Einsatzgebiete von Node. js . . . 42
1. 6 . . . Das Herzstück -- die V8-Engine . . . 43
1. 7 . . . Bibliotheken um die Engine . . . 50
1. 8 . . . Zusammenfassung . . . 57
2. Installation . . . 59
2. 1 . . . Installation von Paketen . . . 60
2. 2 . . . Kompilieren und installieren . . . 74
2. 3 . . . Node Version Manager . . . 76
2. 4 . . . Node und Docker . . . 77
2. 5 . . . Zusammenfassung . . . 78
3. Ein erstes Beispiel . . . 79
3. 1 . . . Der interaktive Modus . . . 79
3. 2 . . . Die erste Applikation . . . 86
3. 3 . . . Debuggen von Node. js-Applikationen . . . 96
3. 4 . . . Entwicklungswerkzeug »nodemon« . . . 107
3. 5 . . . Zusammenfassung . . . 108
4. Node. js-Module . . . 109
4. 1 . . . Modularer Aufbau . . . 109
4. 2 . . . Kernmodule . . . 112
4. 3 . . . JavaScript-Modulsysteme . . . 132
4. 4 . . . Eigene Module erzeugen und verwenden . . . 135
4. 5 . . . Zusammenfassung . . . 148
5. HTTP . . . 149
5. 1 . . . Der Webserver . . . 149
5. 2 . . . Node. js als HTTP-Client . . . 178
5. 3 . . . Sichere Kommunikation mit HTTPS . . . 182
5. 4 . . . HTTP/2 . . . 184
5. 5 . . . Zusammenfassung . . . 189
6. Express . . . 191
6. 1 . . . Aufbau . . . 191
6. 2 . . . Installation . . . 192
6. 3 . . . Grundlagen . . . 194
6. 4 . . . Setup . . . 196
6. 5 . . . Movie-Datenbank . . . 199
6. 6 . . . Middleware . . . 209
6. 7 . . . Erweitertes Routing -- Löschen von Datensätzen . . . 214
6. 8 . . . Anlegen und Bearbeiten von Datensätzen -- Body-Parser . . . 217
6. 9 . . . Express 5 . . . 224
6. 10 . . . HTTPS und HTTP/2 . . . 225
6. 11 . . . Zusammenfassung . . . 228
7. Template-Engines . . . 229
7. 1 . . . Eine eigene Template-Engine . . . 230
7. 2 . . . Template-Engines in der Praxis -- Pug . . . 232
7. 3 . . . Handlebars . . . 247
7. 4 . . . Zusammenfassung und Ausblick . . . 257
8. Anbindung von Datenbanken . . . 259
8. 1 . . . Node. js und relationale Datenbanken . . . 260
8. 2 . . . Node. js und nicht relationale Datenbanken . . . 280
8. 3 . . . Zusammenfassung . . . 293
9. Authentifizierung und Sessionhandling . . . 295
9. 1 . . . Passport . . . 295
9. 2 . . . Setup und Konfiguration . . . 296
9. 3 . . . Anmeldung an der Applikation . . . 300
9. 4 . . . Zugriff auf Ressourcen . . . 308
9. 5 . . . Zusammenfassung . . . 317
10. REST-Server . . . 319
10. 1 . . . REST -- eine kurze Einführung und wie es in Webapplikationen verwendet wird . . . 319
10. 2 . . . Zugriff auf die Applikation . . . 320
10. 3 . . . Anpassungen an der Applikationsstruktur . . . 322
10. 4 . . . Lesende Anfragen . . . 323
10. 5 . . . Schreibende Anfragen . . . 334
10. 6 . . . Authentifizierung mit JSON Web Tokens . . . 342
10. 7 . . . OpenAPI-Spezifikation -- Dokumentation mit Swagger . . . 351
10. 8 . . . Validierung . . . 355
10. 9 . . . Zusammenfassung . . . 362
11. GraphQL . . . 363
11. 1 . . . GraphQL-Bibliotheken . . . 364
11. 2 . . . Integration in Express . . . 365
11. 3 . . . Daten über die Schnittstelle auslesen . . . 369
11. 4 . . . Schreibende Zugriffe auf die GraphQL-Schnittstelle . . . 374
11. 5 . . . Authentifizierung für die GraphQL-Schnittstelle . . . 380
11. 6 . . . Zusammenfassung . . . 382
12. Echtzeit-Webapplikationen . . . 383
12. 1 . . . Die Beispielapplikation . . . 384
12. 2 . . . Setup . . . 385
12. 3 . . . Websockets . . . 391
12. 4 . . . Socket. IO . . . 404
12. 5 . . . Zusammenfassung . . . 410
13. Typsichere Applikationen in Node. js . . . 411
13. 1 . . . Typsysteme für Node. js . . . 412
13. 2 . . . Werkzeuge und Konfiguration . . . 419
13. 3 . . . Grundlagen . . . 425
13. 4 . . . Klassen . . . 430
13. 5 . . . Interfaces . . . 433
13. 6 . . . Type Aliases in TypeScript . . . 435
13. 7 . . . Generics . . . 436
13. 8 . . . TypeScript im Einsatz in einer Node. js-Applikation . . . 438
13. 9 . . . Zusammenfassung . . . 440
14. Webapplikationen mit Nest . . . 441
14. 1 . . . Installation und erste Schritte mit Nest . . . 442
14. 2 . . . Die Nest CLI . . . 444
14. 3 . . . Struktur der Applikation . . . 448
14. 4 . . . Module -- logische Einheiten im Quellcode . . . 450
14. 5 . . . Controller -- die Endpunkte einer Applikation . . . 453
14. 6 . . . Providers -- die Businesslogik der Applikation . . . 458
14. 7 . . . Zugriff auf Datenbanken . . . 462
14. 8 . . . Dokumentation der Endpunkte mit OpenAPI . . . 470
14. 9 . . . Authentifizierung . . . 473
14. 10 . . . Ausblick: Testen in Nest . . . 480
14. 11 . . . Zusammenfassung . . . 483
15. Node auf der Kommandozeile . . . 485
15. 1 . . . Grundlagen . . . 485
15. 2 . . . Der Aufbau einer Kommandozeilenapplikation . . . 488
15. 3 . . . Zugriff auf Ein- und Ausgabe . . . 493
15. 4 . . . Werkzeuge . . . 503
15. 5 . . . Signale . . . 510
15. 6 . . . Exit Codes . . . 513
15. 7 . . . Zusammenfassung . . . 514
16. Asynchrone Programmierung . . . 515
16. 1 . . . Grundlagen asynchroner Programmierung . . . 515
16. 2 . . . Externe Kommandos asynchron ausführen . . . 521
16. 3 . . . Node. js-Kindprozesse erzeugen mit »fork« . . . 527
16. 4 . . . Das »cluster«-Modul . . . 532
16. 5 . . . Worker-Threads . . . 541
16. 6 . . . Promises in Node. js . . . 544
16. 7 . . . Async Functions . . . 552
16. 8 . . . Zusammenfassung . . . 555
17. RxJS . . . 557
17. 1 . . . Grundlagen . . . 558
17. 2 . . . Operatoren . . . 564
17. 3 . . . Subjects . . . 581
17. 4 . . . Scheduler . . . 582
17. 5 . . . Zusammenfassung . . . 583
18. Streams . . . 585
18. 1 . . . Einleitung . . . 585
18. 2 . . . Readable Streams . . . 589
18. 3 . . . Writable Streams . . . 601
18. 4 . . . Duplex-Streams . . . 609
18. 5 . . . Transform-Streams . . . 611
18. 6 . . . Gulp . . . 613
18. 7 . . . Zusammenfassung . . . 615
19. Arbeiten mit Dateien . . . 617
19. 1 . . . Synchrone und asynchrone Funktionen . . . 617
19. 2 . . . Existenz von Dateien . . . 619
19. 3 . . . Dateien lesen . . . 620
19. 4 . . . Fehlerbehandlung . . . 626
19. 5 . . . In Dateien schreiben . . . 627
19. 6 . . . Verzeichnisoperationen . . . 631
19. 7 . . . Weiterführende Operationen . . . 634
19. 8 . . . Zusammenfassung . . . 640
20. Socket-Server . . . 641
20. 1 . . . Unix-Sockets . . . 642
20. 2 . . . Windows Pipes . . . 649
20. 3 . . . TCP-Sockets . . . 650
20. 4 . . . UDP-Sockets . . . 657
20. 5 . . . Zusammenfassung . . . 662
21. Package Manager . . . 663
21. 1 . . . Die häufigsten Operationen . . . 664
21. 2 . . . Weiterführende Operationen . . . 677
21. 3 . . . Werkzeuge für NPM . . . 685
21. 4 . . . Yarn . . . 688
21. 5 . . . Zusammenfassung . . . 689
22. Qualitätssicherung . . . 691
22. 1 . . . Styleguides . . . 692
22. 2 . . . Linter . . . 693
22. 3 . . . Prettier . . . 699
22. 4 . . . PMD CPD . . . 700
22. 5 . . . Husky . . . 703
22. 6 . . . Zusammenfassung . . . 704
23. Testing . . . 705
23. 1 . . . Unittesting . . . 705
23. 2 . . . Assertion Testing . . . 708
23. 3 . . . Jasmine . . . 714
23. 4 . . . Jest . . . 723
23. 5 . . . Praktisches Beispiel von Unittests mit »Jest« . . . 726
23. 6 . . . Umgang mit Abhängigkeiten -- Mocking . . . 731
23. 7 . . . Zusammenfassung . . . 734
24. Sicherheitsaspekte . . . 735
24. 1 . . . »filter input« und »escape output« . . . 736
24. 2 . . . Absicherung des Servers . . . 739
24. 3 . . . NPM-Sicherheit . . . 758
24. 4 . . . Schutz des Clients . . . 761
24. 5 . . . Zusammenfassung . . . 766
25. Skalierbarkeit und Deployment . . . 767
25. 1 . . . Deployment . . . 767
25. 2 . . . Toolunterstützung . . . 775
25. 3 . . . Skalierung . . . 777
25. 4 . . . »pm2« -- Prozessmanagement . . . 786
25. 5 . . . Docker . . . 787
25. 6 . . . Zusammenfassung . . . 789
26. Performance . . . 791
26. 1 . . . YAGNI -- You Ain' t Gonna Need It . . . 791
26. 2 . . . CPU . . . 792
26. 3 . . . Arbeitsspeicher . . . 800
26. 4 . . . Netzwerk . . . 806
26. 5 . . . Zusammenfassung . . . 810
27. Microservices mit Node. js . . . 811
27. 1 . . . Grundlagen . . . 811
27. 2 . . . Architektur . . . 814
27. 3 . . . Die Infrastruktur . . . 816
27. 4 . . . Ein asynchroner Microservice mit RabbitMQ . . . 818
27. 5 . . . API-Gateway . . . 827
27. 6 . . . Synchroner Microservice mit Express . . . 840
27. 7 . . . Zusammenfassung . . . 849
28. Deno . . . 851
28. 1 . . . Die zehn Dinge, die Ryan Dahl bereut . . . 851
28. 2 . . . Installation von Deno . . . 854
28. 3 . . . Ausführung . . . 855
28. 4 . . . Arbeiten mit Dateien . . . 857
28. 5 . . . Ein Webserver mit Deno . . . 864
28. 6 . . . Das Modulsystem . . . 866
28. 7 . . . Zusammenfassung . . . 871
Index . . . 873