Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Learn JavaScript: Full-Stack from Scratch
Welcome To The Course!
Where Do We Begin? (10:02)
The 10 Days of JavaScript: The Language Itself
Getting Started (16:31)
Functions (19:58)
Objects (19:43)
Arrays (19:47)
Making Decisions (18:36)
Higher-Order Functions (18:19)
Returning vs Mutating (19:38)
Scope & Context (Part 1) (17:42)
Scope & Context (Part 2) (14:53)
Miscellaneous Info (Part 1) (13:32)
Miscellaneous Info (Part 2) (9:18)
Building To-Do App (Part 1) (17:20)
Building To-Do App (Part 2) (10:13)
Server Basics
Why Do We Need a Server? (11:23)
Node.js Intro (10:22)
Text Editor Software (10:48)
Our First Basic Server (19:54)
Express Intro (Part 1) (10:13)
Express Intro (Part 2) (19:48)
What's Next? (Big Picture) (14:03)
Database Basics
First Taste of a Database (10:57)
Note About The Next Video Lesson
Optional: Host Your Database Locally On Your Computer (7:19)
CRUD: Actually Working With A Database (14:04)
Initial Setup for App #1 (18:02)
Save Time: Automatic Node App Restarts (9:12)
Note About Concept In The Next Video Lesson
Connecting Node App To Database (19:20)
Solution to Common Database Problem
Installing NPM Packages Without Stopping Server/App
Reading Data From a Database (16:05)
Updating a Database Item (Part 1) (19:58)
Updating a Database Item (Part 2) (19:55)
Deleting a Database Item (12:49)
Create New Item Without Page Reload (19:55)
Client-Side Rendering (10:17)
What About Security? (19:59)
Note About Front-End Security
Pushing Our App Onto The Internet (17:20)
Starting Our Complex App (App #2)
What's Next? (8:03)
Optional: Finished Product Working Example (8:35)
Let's Begin App #2 (18:39)
Always Have The Current Year In The Footer
Important Note About Package Versions To Save You Frustration
What Is A Router? (14:11)
What Is A Controller? (17:52)
Security Note
What Is A Model? (19:59)
Note About Arrow Functions & The "this" Keyword
Adding Validation To Our Model (19:58)
Quick Misc. Clean Up (8:01)
Quick Note About Connecting to Database
Optional: Hosting Your Database Locally
Connecting To Database In a Reusable Fashion (16:40)
Best Practice Time Out: Environment Variables (10:24)
Quick Note
Letting Users Log In (16:27)
What Is a Promise? (Part 1) (16:00)
What Is a Promise? (Part 2) (14:24)
Running Multiple Promises Efficiently When Order Doesn't Matter
Hashing User Passwords (13:53)
How Can We "Identify" or "Trust" a Request? (19:17)
Session Security (2:48)
Understanding Sessions (18:43)
Letting Users Logout (11:57)
Adding Flash Messages (16:29)
User Registration Improvements (Part 1) (17:41)
User Registration Improvements (Part 2) (12:01)
Adding User Profile Photos (15:36)
User Created Posts
Letting Users Create Posts (Part 1) (17:31)
Letting Users Create Posts (Part 2) (12:17)
ObjectId Instead of ObjectID
Post Model (Part 1) (19:59)
Post Model (Part 2) (7:16)
Don't Forget The New Keyword With ObjectId
Viewing a Post (Part 1) (7:45)
Viewing a Post (Part 2) (19:10)
Performing a Lookup in MongoDB (Part 1) (16:51)
Performing a Lookup in MongoDB (Part 2) (8:14)
User Profile Screen (18:11)
View Posts by Author (19:47)
Is the Current Visitor the Owner of the Post? (12:53)
The "Edit" Screen for a Post (8:50)
Updating Posts in Database (Part 1) (10:51)
Updating Posts in Database (Part 2) (18:57)
Miscellaneous Improvements (14:51)
Markdown: Safe User Generated HTML (16:31)
Make This Quick Edit To Your Code
Let Users Delete a Post (13:58)
Live Search Feature
Staying Organized: Front-End JavaScript (19:58)
Important Note For Windows Users
Showing and Hiding Search Overlay (16:54)
Responding to Key Press Events (19:12)
Back-End Aspect of Search (18:58)
How To Create DB Indexes Within Node.js Code
Generating HTML for Search Results (Part 1) (10:05)
Generating HTML for Search Results (Part 2) (10:47)
Fixing The Month for Post Dates in Search Results
Sanitizing User Generated HTML on the Front-End (8:12)
Letting Users Follow Each Other
Letting Users Follow Each Other (12:25)
Saving a "Follow" Action Into Our Database (12:26)
Stop Following a User (Part 1) (13:49)
Stop Following a User (Part 2) (13:16)
Profile Followers Screen (Part 1) (10:26)
Profile Followers Screen (Part 2) (15:25)
Following Screen (Part 1) (13:29)
Following Screen (Part 2) (17:30)
Homepage Feed (Posts From Those You Follow) (19:32)
Live Chat (Socket.IO)
Beginning Chat Feature (19:37)
Socket.IO (Part 1) (10:43)
Socket.IO (Part 2) (11:42)
Note About Socket.io In The Next Lesson
Finishing Chat (Part 1) (13:39)
Finishing Chat (Part 2) (19:56)
Quick Misc. Feature: Dynamic Title Tag (7:41)
Live Validation for Registration Form
Live Form Validation (Part 1) (18:41)
Live Form Validation (Part 2) (18:22)
Live Form Validation (Part 3) (19:58)
Live Form Validation (Part 4) (19:08)
What is CSRF? (Security)
This Chapter Is For Historical Context (2:03)
About The "csurf" Package From NPM
Preventing Cross-Site Request Forgery (CSRF) (19:58)
Adjusting Our App To Use CSRF Token (13:04)
Let's Create an API
Setting Up The Skeleton for an API (19:42)
JSON Web Tokens (Part 1) (11:38)
JSON Web Tokens (Part 2) (13:47)
Finishing API and Understanding CORS (19:10)
Deploying Complex App to Render
Pushing Our Complex App Up Onto The Web (12:11)
Note About SendGrid In The Next Video Lesson
Sending Email From Our App (15:25)
Optional: Convert ".then()" Syntax to Async / Await (18:13)
Turning Our App Into a SPA
Preventing Default Behavior of Links (10:49)
Fetching New Page Data With JS (6:11)
The Browser's History API (5:11)
Submitting Forms With Client-Side JS (13:28)
Edit & Delete Posts (SPA) (10:06)
Where Do We Go From Here?
Next Steps & Career Advice (19:53)
Teach online with
Saving a "Follow" Action Into Our Database
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock