Robert Prediger, Ralph Winzinger
Node.js
Professionell hochperformante Software entwickeln
Vorwort
12
..... und ihre Motivation
14
Das Zielpublikum
14
Das Buch
15
Die Welt von JavaScript
16
1 Hello, Node.js
18
1.2 Installation
25
1.2.1 Windows
25
1.2.2 Mac OS X
25
1.2.3 Debian
26
1.2.4 Ubuntu
26
1.2.5 openSUSE und SLE
27
1.2.6 Fedora
28
1.2.7 RHEL und CentOS
28
1.3 IDEs
28
1.3.1 cloud9
29
1.3.2 WebStorm
31
1.3.3 Nodeclipse
32
1.3.4 WebMatrix/VisualStudio
33
1.3.5 Atom
33
1.4 nvm & nodist – mit Node-Versionen jonglieren
34
1.4.1 *ix-Systeme
35
1.4.2 Windows
36
1.5 npm – Node Packaged Modules
38
1.5.1 npm install – ein Modul laden
39
1.5.2 Global? Lokal?
40
1.5.3 package.json
41
1.5.4 Module patchen
41
1.5.5 Browserify
45
1.6 Kein Code?
47
2 You build it .....
52
2.1 File I/O
53
2.1.1 Dateifunktionen in Node.js
53
2.1.2 Permissions
56
2.1.3 „watch“ – Änderungen im Auge behalten
57
2.1.4 Erweiterungen
58
2.1.4.1 Modul „fs-extra“
59
2.1.4.2 Modul „file“
60
2.1.4.3 Modul „find“
60
2.1.4.4 Modul „properties“
61
2.1.4.5 Modul „token-filter“
62
2.2 Streams
63
2.2.1 Aus Streams lesen .....
64
2.2.1.1 Objekte und Strings
65
2.2.2 ..... und in Streams schreiben
66
2.2.2.1 Streams verknüpfen
66
2.2.3 Eigene Streams implementieren
67
2.2.3.1 Ein Random-Number-Generator
68
2.2.3.2 Ein Daten-Lösch-Stream
70
2.2.3.3 Ein Verschlüsselungsserver für geheime Botschaften
71
2.2.4 Buffers and Strings
73
2.3 Daten für immer
74
2.3.1 Neo4j
74
2.3.1.1 Asynchron?
77
2.3.1.2 Querying Neo4j
78
2.3.1.3 Cypher für Abfragen
79
2.3.1.4 Indizes
81
2.3.1.5 Cypher für Batches
82
2.3.2 MongoDB
83
2.3.2.1 Wann sind Daten geschrieben?
84
2.3.2.2 _id
85
2.3.2.3 Die Mongo-API
85
2.4 Sichtbarkeit erzeugen – im Web
90
2.4.1 Middleware Framework Connect
90
2.4.1.1 Installation und einführendes Beispiel
91
2.4.1.2 Ausprägungen von Connect-Middleware-Typen
92
2.4.1.3 Integrierte Middleware-Komponenten
94
2.4.1.4 Middleware-Strukturen
102
2.4.2 Webentwicklung mit Express
107
2.4.2.1 Ready for take off: Installation und Einführungsbeispiel
108
2.4.2.2 Routing von HTTP-Anfragen
111
2.4.2.3 Views und Web-Templating
115
2.4.3 Express 4
116
2.4.4 Jade
118
2.4.4.1 Einbindung in Express
120
2.4.4.2 Sprachelemente von Jade
120
2.4.5 swig
133
2.4.5.1 Grundeinstellungen
133
2.4.5.2 Einbindung in Express
134
2.4.5.3 Sprachelemente von swig
135
2.4.5.4 Filterliste
138
2.4.5.5 Verketten von Filtern
141
2.4.5.6 Die swig-API
141
2.4.5.7 Eigene Funktionalitäten hinzufügen
143
2.4.6 Sessions & Authentifizierung
144
2.4.6.1 Ich will Kekse und biete dafür eine Session
145
2.4.6.2 Authentifizierung (Authentication)
147
2.4.6.3 Facebook
150
2.4.6.4 Twitter
151
2.4.6.5 Google
152
2.5 socket.io
153
2.5.1 Verbindung herstellen
154
2.5.2 Kommunikation
155
2.5.3 Broadcast
156
2.5.4 Private Daten
156
2.5.5 Rückantwort und Bestätigung
156
2.5.6 Namespaces
157
2.5.7 Räume
158
2.5.8 Autorisierung
160
2.5.8.1 Globale Autorisierung
160
2.5.8.2 Autorierung mit Namespaceses
161
2.5.8.3 Benutzerdefinierte Variablen und Autorisierung
162
2.5.9 Sessions mit „socket.io-session“
162
2.5.9.1 socket.io-bundle
162
2.5.9.2 socket.io-passport
163
2.5.10 Version 1.0
164
2.6 Node.js und Webservices
168
2.6.1 SOAP-Services
168
2.6.1.1 Von und nach SOAP
170
2.6.2 REST-Services
180
2.6.2.1 Von Nomen, Verben und Routen
181
2.6.2.2 Ansichtssache? Verhandlungssache
185
2.6.2.3 Fehlermeldungen
187
2.6.2.4 Plug-ins
188
2.6.2.5 Sicherheit und Authentifizierung
193
2.6.3 XML-Verarbeitung
200
2.6.3.1 XML-Parsing
200
2.6.3.2 XML-Erzeugung und -Veränderung
206
2.6.3.3 Exkurs: Ein (selbst unterschriebenes) Zertifikat erstellen
208
2.7 Clustering
210
2.7.1 Methoden und Eigenschaften von cluster
214
2.7.1.1 isMaster/isWorker
214
2.7.1.2 fork/online – Event
214
2.7.1.3 exit – Event
215
2.7.1.4 workers
215
2.7.2 Der Master
215
2.7.2.1 setupMaster()
216
2.7.2.2 fork()
217
2.7.2.3 disconnect()
217
2.7.3 Der Worker
218
2.7.3.1 Die Attribute „id“ und „process“
218
2.7.3.2 Das suicide-Attribut
218
2.7.3.3 kill() & disconnect()
218
2.8 Der Callback-Hölle entfliehen
219
2.8.1 async
220
2.8.1.1 Kontrollfluss
222
2.8.2 Q
229
2.8.2.1 then
231
2.8.2.2 fail
232
2.8.2.3 progress
232
2.9 Auf Herz und Nieren –
2.9 Auf Herz und Nieren –
233
233
2.9.1 Mocha
234
2.9.1.1 Asynchrone Aufrufe und Timeouts
237
2.9.1.2 Set-Up & Tear-Down
239
2.9.1.3 Only & Skip
240
2.9.1.4 Mocha im Browser
240
2.9.2 Assert & Chai
242
2.9.2.1 Assert
242
2.9.2.2 Chai
244
2.9.3 Sinon
249
2.9.3.1 Spies
251
2.9.3.2 Stubs
252
2.9.3.3 Mocks
253
2.9.3.4 Faked Timers
254
2.9.4 Jasmine
255
2.9.5 Continuous Test
256
2.9.5.1 Mocha & Jasmine im Überwachungsmodus
256
2.9.5.2 Travis-CI
257
3 ..... you run it!
262
3.1.1 Patterns & Style
263
3.1.1.1 package.json
264
3.1.1.2 Import & Export
265
3.1.1.3 Tests
266
3.1.1.4 Dokumentation
267
3.1.2 Ausführbare Module
269
3.1.3 Module mit nativen Abhängigkeiten
271
3.1.3.1 OS Libraries
272
3.1.3.2 Sourcecode Dependencies
273
3.1.3.3 Hands-On mit Add-On
274
3.1.4 It works on my machine – Dependency Hell
283
3.1.5 Veröffentlichung von Modulen
286
3.1.5.1 Einen Benutzer erzeugen .....
286
3.1.5.2 ..... und das Modul publizieren
286
3.2 Private Repositories für npm
287
3.2.1 reggie
288
3.2.1.1 Inbetriebnahme
288
3.2.1.2 reggie publish
289
3.2.1.3 Laden von Modulen
289
3.2.1.4 HTTP-Abfragen
291
3.2.1.5 npm-Client
291
3.2.2 sinopia
292
3.3 Deployment
294
3.3.1 Ein eigener Server
295
3.3.1.1 Docker
295
3.3.1.2 Modul „forever“
297
3.3.1.3 pm2
301
3.3.1.4 git-deploy
307
3.3.2 Cloud
308
3.3.2.1 PaaS-Provider
308
3.3.2.2 Server-Systeme
312
3.4 Was Node.js antreibt ..... V8 Engine
313
3.4.1 Architektur
314
3.4.2 Die Performance-Tricks
316
3.4.2.1 „Fast Property Access“
317
3.4.2.2 Arrays
318
3.4.2.3 Kein Interpretationsspielraum
319
3.4.2.4 Garbage Collection
319
3.4.2.5 Caching Modules
320
3.5 Logging
321
3.5.1 debug
321
3.5.2 winston
324
3.5.2.1 Transportmechanismen
324
3.5.2.2 Logger-Instanz
325
3.5.2.3 Logging Levels
326
3.5.2.4 Strukturierte Daten loggen
326
3.5.2.5 Profiling
327
3.5.3 Bunyan
328
3.5.3.1 Konfiguration
329
3.5.3.2 Child Logger
330
3.5.3.3 Die „src“-Option
331
3.5.3.4 Streams
331
3.6 Debugging
332
3.6.1 Der Node-Debugger
332
3.6.2 Node-Inspector
335
3.7 Monitoring
338
3.7.1 Kommerzielle Monitoring-Services
340
3.7.1.1 New Relic
340
3.7.1.2 Nodetime
342
3.7.1.3 StrongOps
346
3.8 Alternativen zu Node.js
351
3.8.1 Vert.x – die polyglotte JVM-Alternative
352
3.8.1.1 Architektur
352
3.8.1.2 Hands-On
359
3.8.1.3 Node.js oder Vert.x?
364
Index
366
© 2009-2024 ciando GmbH