We may earn an affiliate commission when you visit our partners.
Course image
Joseph Heidari

Welcome to the most comprehensive Node.js course on the internet.

In this course, we're going to do a deep dive into Node.js itself without cluttering our minds with other tools and NPM packages and truly master this powerful technology.

Read more

Welcome to the most comprehensive Node.js course on the internet.

In this course, we're going to do a deep dive into Node.js itself without cluttering our minds with other tools and NPM packages and truly master this powerful technology.

This course is heavily focused on computer science topics and fundamentals that are crucial to understand for becoming a great back-end engineer. You can only properly understand Node.js and unlock its full power if you understand these other computer science topics. So that's why we will also learn these other vital topics so that you can truly master Node.js and take your back-end engineering skills to a whole new level.

We will also use all these vital concepts that we'll learn in practice by building various exciting projects just using Node.js.

This is an intense course for people who want to get to the top of the field and get to a level of driving innovation and making an impact within the industry instead of just scratching the surface and following a few software trends and tools.

Each section of the course is like its own mini-course, and by completing each section, you'll learn some essential Node.js, computer science and back-end engineering concepts that will help you not just if you want to use Node.js but throughout your whole career as a software engineer. These things will stay with you for years and decades to come.

Let's do a quick walkthrough about what you will accomplish after completing some of the sections:

Understanding Buffers: Here, we will deeply understand buffers and how to work directly with binary data, which is essential for all the other sections.

Understanding File System: As a back-end developer, you'll work with files a lot, be it saving some data to disk, handling file uploads and many other examples, so it's essential to have a good understanding of them, which you'll gain after completing this section. We'll also learn how Node.js deals with files and master the "fs" module.

Understanding Streams: In this section, we're going to master Streams, which will allow us to develop highly-performant apps capable of handling terabytes of data with ease while having great memory usage. We'll build many mini-projects throughout the section, including an encryption-decryption app from scratch that could encrypt terabytes of data by directly modifying the binary data. This section lays the foundation for future sections where we'll utilize Streams heavily to create powerful and efficient network applications.

Understanding Networking: Node.js was primarily designed to create network applications, so it's of utmost importance that we gain a decent understanding of networking, which we will do after completing this section. Here's a list of items we'll learn in this section:

  • What exactly a network is

  • How the internet works

  • Mac Addresses

  • IPV4 & IPv6 Addresses

  • TCP

  • UDP

  • DNS

  • Fundamentals of deployment

We'll build 2 low-level apps using only Node.js, a chat and a file uploader app directly on top of TCP. And then, we'll deploy them to a Linux server in the most basic way without using unnecessary tools.

We'll see exactly what happens in our network card, every single 0s and 1s exchanged for a particular thing using Wireshark, and gain a much better understanding of networking and how most of the well-known protocols like This section will broaden your horizons, and you'll realize that there are far more things that you can do with Node.js than just creating web servers.

Understanding HTTP: In this section, we'll utilize and combine all that we've learned from previous sections and finally deeply understand HTTP once and for all. We won't be learning how to use Express; instead, we will build something similar ourselves.

We'll start by understanding the most important HTTP concepts, such as connection types, client-server model, messages, requests, responses, HTTP Methods, status codes, mime types, necessary headers and so much more. And then emulate an HTTP protocol directly on top of TCP using the net module and see precisely every single 0s and 1s that get exchanged for an HTTP request and response interaction.

Once we understand the fundamentals of HTTP and the "http" module, we'll take things to the next level and start building our framework. And then, using our framework, we'll make a fully functional web application.

This section will take your web development skills to the next level. You'll have a much better understanding of how all these popular NPM packages, like Express, body-parser, Multer, cors, etc., that are built on top of the "http" module work. Well, you'll learn how to make them from scratch, just using them will not be that much of a problem.

Update February 2024 - New Module Is Out. Understanding Unix:

With over 15 hours of comprehensive new content, get ready to learn how you can harness the power of multiple technologies and programming languages together with Node.js to create extraordinarily powerful applications.

Unix, one of the most influential inventions ever in the software industry, is crucial for software engineers to understand. In this module, we'll delve deep into some of the key concepts such as Bash, Shells, IPC, Data Streams, Process Management, Clustering, even some C and much more.

We will also understand these Node.js modules:

  • Child Processes

  • Cluster

  • Process

  • Path

  • Console

  • OS

All these Unix concepts that you'll learn in this section instantly apply to many other programming languages. You'll gain a foundation that you can keep building on to create much higher-quality applications than ever before.

At the end of the section, we'll develop a video editing web application with Node.js without using other NPM packages. And this is just the beginning. You'll be able to do much more than this once you're done with the section and see many new possibilities that you never thought about before.

Update May 2024 - New Module Is Out. Understanding Compression:

In this section, we will explore the fascinating world of compression. Understanding compression is crucial for reducing the size of your data, and one important use case is to enhance the speed of your network applications. We'll dive into the Node.js Zlib module and see how it is possible to reduce the number of bits needed to store and transfer your data without losing any information.

Update July 2024 - New Module Is Out. Understanding Multi-Threading:

Get ready for the most advanced section of the course, where we're going to utilize the full power of Node.js to see how extreme we can get. 

We'll learn what exactly threads are and how to utilize them to achieve performance boosts up to many times, depending on how many CPU cores we have. We'll learn when we should use multi-threading and when we shouldn't. We'll learn how to set up communication channels between our threads, both with message passing and shared memory. We'll explore the Node.js thread pool and even develop one ourselves from scratch. We'll see how multi-threading differs in Node.js from some of the other languages. We'll cover synchronization, race conditions, deadlocks, semaphores, mutual exclusion and more.

You'll learn how to keep the event loop light and not end up doing operations that will mysteriously block your main thread and cause your app to be way slower.

This section will take your Node.js skills to the next level by teaching you how to run things in parallel, handle multiple event loops, and understand the complications that arise with that.

Please note that there are more exciting sections to come. The course is still in production, and the expected date for the course completion is within the fall of 2024.

If at any point in the course, you get stuck or feel like you need more clarification on something, I will be there in the QA to help you every step of the way from start to finish. Sign up today, and let's master Node.js and take your back-end engineering skills to a whole new level.

Enroll now

What's inside

Learning objectives

  • Learn some of the vital concepts of back-end engineering
  • Get to a level capable of easily learning various nodejs frameworks and libraries
  • Truly and deeply understand what exactly nodejs is and see its full potentials far beyond just creating web servers
  • Understand and master nodejs as it is without using any other npm packages
  • Understand some of the most important operating systems concepts that every back-end developer needs to understand
  • Be able to easily learn and understand the nodejs documentation
  • Learn how to directly deal with binary data and manipulate the 0s and 1s however you want
  • Learn the most important networking concepts and understand where nodejs exactly comes into play
  • Learn exactly what happens when you deploy your back-end applications rather than focusing on a few tools
  • Learn how to create low-level network applications directly on top of tcp or udp and develop your own protocols
  • Deeply understand what http really is and how it works
  • Get a deep understanding of the file system
  • Master streams to develop highly performant and memory-efficient applications capable of dealing with terabytes of data with ease
  • Learn how to incorporate compression to enhance the speed of your network applications
  • Understand unix and open up a world of new possibilities
  • Understand the eventemitter object
  • Master multi-threading in nodejs & achieve significant performance improvements
  • Show more
  • Show less

Syllabus

Introduction
Course Overview
A Note About the Sections In Production
Setting Up - For Windows Users Only
Read more
Setting Up - For Mac Users Only
Setting Up - For Linux Users Only
Introduction to the Command Line
Learning NVM & Node.js Versions
Node.js Under the Hood
Understanding EventEmitter
EventEmitter Object
Understanding Buffers
Introdcution
Understanding Binary Numbers
Understanding Hexadecimal Numbers
Using a Programming Calculator
Understanding Character Encodings
The Concept of Buffers
Buffers in Action
Allocating Huge Buffers
Fastest Way of Allocating Buffers
Reading the Node.js Docs
Outro
Learning all about the 'fs' module in Node.js and getting a better grasp on how files are handled in a computer
What Exactly Is a File?
How Node.js Deals with Files
Three Different Ways of Doing the Same Thing
Starting Point for Building Our Application
Watching the Command File for Changes
Reading the Content of the Command File
Cleaning Up the Code using EventEmitter
Making Sense Out of the Read Data
Implementing the Create File Command
Defining the Rest of the Commands
Solution - Implementing the deleteFile Function
Solution - Implementing the renameFile Function
Solution - Implementing the addToFile Function
Understanding Streams
Benchmarking Writing a Million Times to a File
Using Streams Naively in Our Solution
So What Exactly Are Streams?
Understanding Different Types of Streams
Fixing the Memory Issue in Our Program
Reading Writable Streams Node.js Docs and Recap
Readable Streams in Action
Selectively Writing Our Data from the Readable Stream
Understanding the Splitting Issue
Implementing the Solution and Resolving the Splitting Issue
Reading Node.js Docs and Recap
Building Our Own Streaming Solution Using Buffers
Understanding Piping
Implementing Our Own Writable Stream
Implementing Our Own Readable Stream
Understanding Duplex and Transform Streams
Creating an Encryption/Decryption Application
Final Notes
Understanding Networking
Understanding MAC Addresses and Switches
Understanding Routers and How the Internet Works
Understanding Networking Layers
A Quick Tip About Filtering in Wireshark
Creating a Simple TCP Application in Node.js
Understanding the Transport Layer - TCP/UDP
A Networking Scenario in Action
Understanding Port Numbers
Starting Point for Building Our Chat App
Creating a Chat Application PART 1
Creating a Chat Application PART 2
Improving the UI of our Chat App
Identifying Users in the Chat App
Notifying Everyone When Somebody Joins/Leaves the Chat
A Note About the 'end' Event on Windows
Some Final Notes About the Chat App
Deploying our Chat App to AWS
Commands Used for Installing NVM
Understanding IPv4 Addresses
Understanding DNS
Understanding IPv6 Addresses
Starting Point for Building Our Uploader App
Creating an Uploader Application
Taking Care of Backpressures in the Uploader App
Getting the File Names Dynamically in the Uploader App
Displaying the Upload Progress in Our Uploader App
Deploying our Uploader App
AWS Cost Warning - Server Termination Reminder
Understanding UDP and the Dgram Module
Understanding HTTP
The Idea of HTTP
Creating a Simple HTTP Server in Node
Understanding HTTP Messages, Requests & Responses
Understanding Connection Types
Building our Client and Sending a Request
Sending a Response to the Client

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops back-end engineering, NodeJS frameworks, and libraries, which are highly sought-after skills in the industry
Taught by Joseph Heidari, who is recognized for their work in Node.js
Teaches Node.js, which is highly relevant to back-end engineering
Covers computer science topics that are widely applicable to back-end engineering
Examines Networking, which is highly relevant to back-end engineering
Covers Unix, which is highly relevant to back-end engineering

Save this course

Save Understanding Node.js: Core Concepts to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Understanding Node.js: Core Concepts with these activities:
Create cheatsheet for yourself
This activity encourages active recall of concepts learned during lecture or reading while building a document to assist your studying
Show steps
  • Identify key concepts, topics, and terms from the lecture or reading
  • Write out each key concept, topic, or term on a separate piece of paper or digital document
  • For each item, summirize the main idea or definition in your own words
  • Organize your cheat sheet in a way that makes sense to you
Follow a Node.js tutorial
Guided tutorials offer step-by-step instructions and examples to help you learn specific skills related to Node.js
Show steps
  • Identify the skill or concept you want to learn
  • Find a tutorial that covers that skill or concept
  • Follow the tutorial step-by-step, taking your time to understand the concepts and techniques involved
  • Complete any exercises or challenges that are included in the tutorial
Start a GitHub repository for your Node.js projects
A central repository houses multiple projects in one location, keeping them accessible and organized for future implementation or reference
Show steps
  • Create an account on GitHub
  • Create a new repository and name it appropriately
  • Clone the repository to your computer
  • Add your Node.js projects to the repository
Four other activities
Expand to see all activities and additional details
Show all seven activities
Work through practice problems
Practice problems supplement the skills and concepts that are emphasized in this course. Spend time practicing these questions every week to build mastery.
Show steps
  • Identify the topic or concept you want to practice
  • Find practice problems related to that topic or concept
  • Work through the practice problems, taking your time to understand the concepts and techniques involved
  • Check your answers and identify any areas where you need additional practice
Attend a Node.js workshop
Workshops provide an immersive learning experience where you can work on Node.js projects and receive feedback from experts, thereby cementing the skills learned in this course
Show steps
  • Identify a Node.js workshop that aligns with your learning goals
  • Register for the workshop and make sure you have the necessary prerequisites and materials
  • Attend the workshop and actively participate in the activities and discussions
  • Complete any assignments or projects that are part of the workshop
Review Node's Design Patterns by Mario Casciaro
This book provides a deep, technical overview of Node.js design patterns that you will engage with throughout the duration of this course.
Show steps
  • Read Introduction - Chapter 10
  • Read and understand the content from Chapter 2 - Chapter 15
  • Pick two design patterns that resonate with you. Create a paragraph that describes both patterns and their pros and cons
Participate in a Node.js hackathon
Hackathons challenge you to use your Node.js skills to solve real-world problems, helping you push your limits and develop innovative solutions
Show steps
  • Identify a Node.js hackathon that interests you
  • Form a team or work individually
  • Brainstorm ideas and develop a Node.js project that addresses the hackathon theme
  • Build and refine your project within the hackathon timeframe
  • Present your project to the judges and receive feedback

Career center

Learners who complete Understanding Node.js: Core Concepts will develop knowledge and skills that may be useful to these careers:

Reading list

We haven't picked any books for this reading list yet.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Understanding Node.js: Core Concepts.
HTTP with Node.js 12
APIs in Node.js: Write a RESTful API Backend Application
Docker for Node.js Projects From a Docker Captain
AWS Lambda & Serverless Architecture Bootcamp (Build 5...
The Complete Neural Networks Bootcamp: Theory,...
Create a 3D multi-player game using THREE.js and Socket.IO
Unreal Engine 5: One Course Solution For Material
Web Development in Node.js: Build Your First Website
NodeJS Unleashed: Mastering Backend Development
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser