- Callbacks
- Async in Series and Parallel
- Creating A Function
- Wrapping Up
- Promises
- Real World Promises
- Creating A Function
- Wrapping Up
- Async & Await
- Real World Async/Await
- Creating Async/Await Functions
- Wrapping Up
- Event Emitters
- Event Emitters: Getting Started
- Event Emitters: Going Further
- Event Emitters: Creating Custom Emitters
- Event Emitters: Wrapping Up
- Streams
- Composing Streams
- Real World Transform Streams
- Steams: Wrapping Up
- Async Final Words
- Getting Started
- Serving the Product Listing
- Express Server
- Web Front-End
- Modularize
- Controlling our API with Query Parameters
- Reading Query Parameters
- Using curl and jq
- Using Postman
- Web Front-end
- Product Filtering
- Fetching a Single Product
- Next() and Middleware
- Error Handling With Next()
- Eliminating Try/Catch
- HTTP POST, PUT, and DELETE
- Wrap Up
- What You Will Learn
- Deployment Options
- Using a VPS (Virtual Private Server)
- Security & System Administration
- HTTPS
- Scaling
- Multiple Apps
- Monitoring
- Deploying Updates
- Zero-Downtime Deploys
- VPS Summary
- Using a PaaS (Platform as a Service)
- Configure the Database
- Deploying
- Deploying to Severless Hosts
- Deployment Considerations
- Configuration Management
- Health Checks
- Logging
- Compression
- Caching and Optimization
- Locking Down Your Server
- X-Powered-By and Internal Implementation Disclosure
- HPP: HTTP Parameter Pollution
- CSRF: Cross-Site Request Forgery
- XSS: Cross-Site Scripting
- Wrapping Up
- Getting Started
- PostgreSQL & Node.js
- Interactive Introduction
- From Mongoose to PG
- Pooling
- Connection Options
- Using Our Database Connection Module
- Create
- Get & List
- Edit & Remove
- Orders and Cross-Database Joins
- Handling Errors
- Migration Complete
- SQL Queries, ORMs, and Query Builders
- Setup
- Create
- Edit
- Get
- Remove
- List
- Migrations
- Seeds
- Wrapping up