# Chapter 16. Server-Side JavaScript with Node ## 16.1 Node Programming Basics ### 16.1.1 Console Output ### 16.1.2 Command-Line Arguments and Environment Variables ### 16.1.3 Program Life Cycle ### 16.1.4 Node Modules ### 16.1.5 The Node Package Manager ## 16.2 Node Is Asynchronous by Default ## 16.3 Buffers ## 16.4 Events and EventEmitter ## 16.5 Streams ### 16.5.1 Pipes ### 16.5.2 Asynchronous Iteration ### 16.5.3 Writing to Streams and Handling Backpressure ### 16.5.4 Reading Streams with Events ## 16.6 Process, CPU, and Operating System Details ## 16.7 Working with Files ### 16.7.1 Paths, File Descriptors, and FileHandles ### 16.7.2 Reading Files ### 16.7.3 Writing Files ### 16.7.4 File Operations ### 16.7.5 File Metadata ### 16.7.6 Working with Directories ## 16.8 HTTP Clients and Servers ## 16.9 Non-HTTP Network Servers and Clients ## 16.10 Working with Child Processes ### 16.10.1 execSync() and execFileSync() ### 16.10.2 exec() and execFile() ### 16.10.3 spawn() ### 16.10.4 fork() ## 16.11 Worker Threads ### 16.11.1 Creating Workers and Passing Messages ### 16.11.2 The Worker Execution Environment ### 16.11.3 Communication Channels and MessagePorts ### 16.11.4 Transferring MessagePorts and Typed Arrays ### 16.11.5 Sharing Typed Arrays Between Threads