In this course, you will learn how to design, build, test, and deploy a RESTful API using Node.js and Mongo. Topics such as working with middleware, testing in Node.js, application organization, data modeling, querying data with Mongoose, using JSON Web Token, securing routes, and deployment.


This course is intended to anyone looking to launch their own Node applications, switch careers, or freelance as a Node developer.


Before attending this course, participant should have basic understanding of vanilla JavaScript (variables, if statements, basic functions, basic objects).

At course completion

After completing this course, participant will be able to: 
  • Built and deployed a fully functional API for an app with authentication 
  • Build their own APIs
  • Turn into a professional Node developer capable of developing, testing, and deploying real-world production applications


This course does not prepare to any exam.

Course outline

Module 1: Getting Setup

Lesson 1: Section Intro
Lesson 2: Installing Node
Lesson 3: What Is Node?
Lesson 4: Why Should I Use Node?
Module 2: Node.js Fundamentals

Lesson 1: Using Require
Lesson 2: Requiring Your Own Files
Lesson 3: Using 3rd Party Modules
Lesson 4: Restarting App with Nodemon
Lesson 5: Getting Input From User
Lesson 6: Simplified Input With Yargs
Lesson 7: Working With JSON
Lesson 8: Adding and Saving Notes
Lesson 9: Refactoring For Reusability
Lesson 10: Removing a Note
Lesson 11: Debugging Node.js Applications
Lesson 12: Debugging via Chrome Dev Tools
Lesson 13: Requiring Arguments and Advanced Yargs
Lesson 14: Arrow Functions
Module 3: Asynchronous Node.js

Lesson 1: Async Basics
Lesson 2: Call Stack & Event Loop
Lesson 3: Callback Functions & APIs
Lesson 4: Pretty Printing Objects
Lesson 5: What's Makes up an HTTP Request?
Lesson 6: Encoding User Input
Lesson 7: Callback Errors
Lesson 8: Abstracting Callbacks
Lesson 9: Wiring Up Weather Search
Lesson 10: Chaining Callbacks Together
Lesson 11: Intro to ES6 Promises
Lesson 12: Advanced Promises
Lesson 13: Weather App With Promises
Lesson 14: Extra Features
Module 4: Web Servers and Application Deployment

Lesson 1: Hello Express
Lesson 2: Creating a Web Server
Lesson 3: Rendering Templates with Data
Lesson 4: Advanced Templating
Lesson 5: Express Middleware
Lesson 6: Adding Version Control (Git)
Lesson 7: Setting Up GitHub & SSH Keys
Lesson 8: Deploying Your Apps
Lesson 9: Adding a New Feature and Deploying
Module 5: Testing Your Applications

Lesson 1: Mocha and Basic Testing
Lesson 2: Watch and Auto Restart Tests
Lesson 3: Using an Assertion Library
Lesson 4: Testing Asynchronous Code
Lesson 5: Testing Express Applications: Part I
Lesson 6: Testing Express Applications: Part II
Lesson 7: Organizing Test With describe()
Lesson 8: Test Spies
Module 6: MongoDB, Mongoose, and REST APIs (Todo API)

Lesson 1: Installing MongoDB and Robomongo (Mac, Linux)
Lesson 2: Installing MongoDB and Robomongo (Windows)
Lesson 3: Building a NoSQL Vocabulary
Lesson 4: Connecting to Mongo and Writing Data
Lesson 5: The ObjectId
Lesson 6: Fetching Data
Lesson 7: Setting Up The Repo
Lesson 8: Deleting Documents
Lesson 9: Updating Data
Lesson 10: The Mongoose ORM
Lesson 11: Setting Up Mongoose
Lesson 12: Validators, Types, and Defaults
Lesson 13: Mongoose Queries and ID Validation
Lesson 14: Getting an Individual Resource - GET /todos/:id
Lesson 15: Deploy API to Heroku
Module 6: Security and Authentication

Lesson 1: Setting Up The User Model
Lesson 2: JWTs and Hashing
Lesson 3: Generating Auth Tokens and Setting Headers
Lesson 4: Private Routes and Auth Middleware
Lesson 5: Hashing Passwords
Lesson 6: Seeding Test Database With Users
Lesson 7: Improving App Configuration
Module 7: Real-Time Web Apps with

Lesson 1: Creating a New Project
Lesson 2: Adding to an App
Lesson 3: Emitting and Listening to Events
Lesson 4: Emitting and Listening to Events (Solution)
Lesson 5: Broadcasting Events
Lesson 6: Message Generator & Tests
Lesson 7: Event Acknowledgements
Lesson 8: Message Form & jQuery
Lesson 9: Geolocation Part I
Lesson 10: Geolocation Part II
Lesson 11: Styling The Chat Page
Lesson 12: Timestamps and Formatting with Moment
Lesson 13: Printing Message Timestamps
Lesson 14: Moustache.js
Lesson 15: Autoscrolling
Lesson 16: Adding a Join Page
Lesson 17: Passing Room Data
Lesson 18: Rooms
Lesson 19: Storing Users With ES6 Classes: Part I
Lesson 20: Storing Users With ES6 Classes: Part II
Lesson 21: Wiring Up User List
Lesson 22: Sending Messages To Room Only
Lesson 23: New Feature Ideas
Module 8: Async/Await - Just Added!

Lesson 1: Async/Await Project Setup
Lesson 2: Async/Await Basics
Lesson 3: A Real-World Example
Lesson 4: Handling Errors and Awaiting Async Function
Lesson 5: Using Async/Await in the Todo API