
Explore Node.js fundamentals, runtime, asynchronous programming, event loops, and modules, then build scalable back-end apps with Express, REST, GraphQL, and MongoDB.
Join our online classroom to build accountability. Introduce yourself, connect with accountability buddies, chat with peers, and post your certificate to become star mentors.
Explore how JavaScript runs on a computer, the role of JavaScript engines like V8, and how Node.js emerged in 2009 to run JavaScript outside the browser, enabling full-stack development.
Node.js is a JavaScript runtime that runs code via the V8 engine and uses libuv for asynchronous I/O, enabling web servers and other applications beyond the browser.
Learn to succeed by coding along, using node installation options, and building a solid JavaScript foundation with the appendix on interpreters, call stacks, single threaded, and the event loop.
Keep projects compatible with Node 12 or higher while exploring the latest Node.js version, and learn how to upgrade the project at the end of the course.
Explore free ZTM resources for gtlm students: coding challenges, open source projects, discourse, campus events, Advent of Code, cheat sheets, blog, industry newsletters, career guidance, LinkedIn group, and YouTube.
Install Node.js by downloading the LTS installer for your operating system and verify the version in the terminal, then explore Node Version Manager to switch environments.
Download the long-term support version of node for Windows from the official site, add it to path, optionally install Python and Visual Studio build tools, and verify with node -v.
Choose between the latest current and the long-term support (LTS) node versions to balance new features with production stability during active and maintenance phases.
Explore how Node's repl reads, evaluates, and prints JavaScript code in a read-eval-print loop, with strings, constants, and exit options.
Set up your Node.js development environment by choosing an editor (VS Code recommended), create hello.js, run it with node in the terminal, and use VS Code extensions for auto-completion.
Build your first node app by printing a mission with template strings and console.log, and learn how process.argv provides command line arguments to your script.
Discover how JavaScript runs on the server with node and the V8 engine, contrasting node’s global object with globals like window and document, and noting node-specific globals such as process.
Explore how Node.js globals like require, __filename, and __dirname differ from browser globals, and how URL and setTimeout bridge front-end and back-end JavaScript in Node versions.
Compare front-end and back-end roles within the client–server architecture. Learn how node-based servers deliver data securely over http/https, using json or xml.
Discover how the Node.js runtime extends the V8 engine with Node APIs, C/C++ bindings, and libuv to run JavaScript outside the browser and perform asynchronous I/O across platforms.
Explore node's internals by tracing JavaScript from v8 through libuv bindings to the C++ layer, then inspect the lib and SIRC folders for the open implementation.
Explore libuv internals in node by tracing the Unix and Windows open implementations in C code. See how node bindings expose libuv to JavaScript and enable cross-platform file operations.
Learn the difference between asynchronous and synchronous code, and how asynchronous code runs in the background while the program moves on, enabling multitasking.
Discover how node.js uses asynchronous, event-driven callbacks to run code without blocking, comparing synchronous execution to asynchronous timing with setTimeout and a rabbit versus turtle race.
Explore non-blocking input and output in node, contrasting blocking synchronous code with asynchronous functions like setTimeout, and learn how CPU offloads work to devices to keep code responsive.
JavaScript runs synchronously by default, but asynchronous behavior arises through callbacks and environment APIs like setTimeout, which Node.js and browser environments provide via libuv.
Understand how processes hold code and memory, how threads run asynchronously across CPU cores, and how JavaScript stays single-threaded, Node enables asynchronous I/O avoiding deadlocks.
Explain how Node runs JavaScript on a single main thread, with the event loop handling asynchronous io via Libuv, using a thread pool for filesystem tasks and kernel network io.
Explore how the event loop handles asynchronous callback functions in node, enabling multiple tasks on a single thread.
Explore how the node event loop processes asynchronous operations by enqueuing callbacks in a callback queue. These callbacks, like setTimeout and file system tasks, are executed in first-in, first-out order.
Understand how the event loop uses queues across four phases—timers, io, setImmediate, and close callbacks—and how setTimeout, setInterval, and setImmediate schedule work to drive asynchronous Node.js.
Compare Node's non-blocking I/O and event loop with PHP and Python's single-threaded models. Learn how Node uses libuv and a thread pool to handle thousands of concurrent requests without blocking.
Node.js excels at io-heavy server tasks—serving data and coordinating with databases and services—making it the glue of the modern web, used by streaming workflows like Netflix.
Apply the observer design pattern to react to events from the event loop, with a subject notifying many observers and supporting multiple updates in applications, including React and Angular.
Explore the Node event emitter and events module, modeling the observer pattern with emitters, listeners, and named events; implement callbacks, emit events, and handle process exit arguments.
Reuse code with Node modules by using the require function to load built-in, custom, and third-party modules, and organize your server code into smaller, maintainable files.
Learn to use built-in node modules to perform http and https requests, handle data with events, and log response chunks from the Google homepage.
Learn why modules are used: reuse proven code, organize your project, and expose only needed functionality while hiding internal details to simplify higher-level operations.
Create and export custom node modules, structure request and response logic with module.exports and require, using relative paths, and define a public interface for a simple https module.
Explore exporting modules in node using module.exports objects or direct property assignments, with send, read, and a shared timeout. The lecture recommends a bottom-of-file interface and selective imports for clarity.
Compare commonjs and es modules, using require and exports versus import and export, and explain how node and mongodb support front-end and back-end code with es modules.
Convert CommonJS to ECMAScript modules by replacing require with import and module.exports with export; rename files to .mjs, set type module in package.json, and include file extensions in imports.
Explore how node caches required modules to prevent re-execution. See how require.cache stores module paths, exports, and loaded status, and why you can't edit a required module's internal function.
Learn how index.js lets a folder act as a module by exporting internals like requests and responses, enabling import via the folder path and the optional spread operator.
Decide whether to use index.js by weighing its simplifying imports against the added module-loading confusion, especially for local versus built-in modules, and learn from Node.js history and best practices.
Explore npm, the node package manager, and its command line tools, to install and manage packages from npmjs.com. Leverage a vast, open source ecosystem for faster, collaborative development.
Learn how to create an npm package, distinguish modules from packages, initialize with npm init, manage package.json, install dependencies like Axios, and run start scripts.
Learn how npm manages node programs as packages, why we initialize a package.json to install dependencies like axios, and how the npm registry hosts reusable packages.
Install Axios to perform a promise-based HTTP request with node and browser APIs, demonstrating third-party modules, npm init, and package.json and package-lock.json; run via npm start.
Explore how the node_modules folder stores direct and nested dependencies installed by npm install, alongside package.json, forming a flat dependency tree that is ignored by git and replicated across projects.
Learn semantic versioning and how major, minor, and patch numbers indicate breaking changes, new functionality, and small bug fixes, and why using well-supported dependencies helps maintain compatibility.
Explore how package-lock.json records exact dependency versions and integrity, ensuring consistent npm installs across team projects, while semantic versioning and symbols like carrot symbol and tilde guide version ranges.
Learn to manage vulnerabilities in dependencies by auditing npm packages, updating to secure versions, and applying npm audit fix to resolve issues like server side request forgery.
Learn how to use npm to install nodemon for automatic restart on code changes, manage local versus global installations, and run dev scripts to keep your Node.js projects self-contained.
Explore planets beyond our solar system and identify habitable worlds using Kepler data, applying theory to hands-on analysis in the complete Node.js developer course.
download the Kepler data from the NASA Exoplanet Archive, load the csv into a node project, and explore thousands of exoplanets with attributes like orbital period, radius, and star temperature.
Set up a node project and install the 6v pass csv package to parse csv data, then import the module in index.js to read and process files.
Learn how to stream large csv data files with the Node.js stream API, using event emitters and line-by-line processing for scalable, memory-efficient parsing.
Learn to stream large datasets with Node by reading Kepler data via a readable stream, handling data, end, and error events, and accumulating chunks into a results array.
Connect a file read stream to the csv parser via pipe to convert the Kepler data into JavaScript objects with column keys.
Filter confirmed Kepler planets to identify habitable, Earth-like worlds by applying stellar flux between 0.36 and 1.11 and a radius under 1.6 Earth radii.
Learn how to identify and validate habitable exoplanets from Kepler data by mapping planet names, comparing with the Habitable Exoplanets Catalog, and refining criteria.
Discover how node powers back ends for websites and apps by handling HTTP requests, DNS lookups, IP addresses, and data formats like JSON, with ports and caching explained.
Learn how DNS and HTTP power browser-server communication, define server APIs, and use common HTTP methods like get, post, delete, and upload to build web apps with Node or Python.
Learn how a browser uses http requests to talk to a server using api, get, post, put, and delete on collections or items, a json body, and the host header.
Explore how HTTP responses use headers, content type, and a body to convey results. Understand status codes from 100 to 500, with examples like 200, 201, 404, and 503.
Create a basic node http server with http.createServer, handle requests via a request listener, and respond using headers, status, and data like JSON on port 3000.
Develop dynamic http APIs by routing requests to multiple endpoints based on the URL and method, delivering json or html and handling 404 errors.
Master parameterized endpoints and URL parsing in Node.js to fetch individual items from a collection. Learn to handle requests for specific friends or messages using route logic.
Explore how the same origin policy uses protocol, host, and ports to restrict cross-origin requests, enabling secure browsing, with fetch blocked without access control allow origin header.
Understand how cross origin resource sharing relaxes the same origin policy to enable requests across domains, as shown by Wikipedia and Wikimedia.org using the access control allow origin header.
Learn to handle post requests on a node's http server to add data, differentiate get from post, and parse json to update an in-memory friends list.
Pipe the request stream to the response stream to echo back posted json, enabling non blocking, streaming data flow with node streams.
Recap of building a basic HTTP server and handling requests, responses, methods, URL, status, headers, and HTML, then leveraging frameworks to manage forms, large files, advanced URL parameters, and authentication.
Discover why Express remains the go-to backend framework for node, offering easy-to-use tools, robust production use, and a basis for node backend frameworks, with broad support from Twitter to Uber.
Initialize the project with npm and install express, then create a server on port 3000 and define get and post routes like / and /messages that return html or json.
Explore the node backend framework landscape by comparing Express, Loopback, Koa, and Next.js, noting Express simplicity, Loopback convention over configuration, Koa's async middleware, and Next.js server-side rendering for React apps.
Explore how Express handles route parameters by building a parameterized friends route, validating user input, returning JSON with status codes, and demonstrating 404 handling.
Postman enables collaborative API testing with collections, requests, automated tests, documentation, health monitoring, and workspaces, with REST, SOAP, and GraphQL support, while Insomnia offers a simpler, easy-to-use UI.
Install Nordmann as a development dependency with npm to auto restart the server on file changes, and add a watch script; keep development tools in devDependencies to keep node_modules tidy.
Discover how express middleware sits between the request and response, wired with app.use, flowing in a sequential chain with next to reach the downstream endpoint.
Register a logging middleware in express that logs request method and URL, measures processing time with start and delta, and passes control to the next handler.
Learn how to handle post requests in Express by parsing JSON with Express.json, creating a new friend in the friends collection from req.body.name, and returning success or a 400 error.
Explore the model view controller (mvc) pattern to organize Express apps into model, view, and controller layers, translating data, handling requests, and presenting results.
Apply the model view controller pattern to an Express API by organizing route handlers as controllers that manipulate models and return json views to clients, with separate models for data.
Learn how to organize large Express applications using routers as mini applications, mounting them under specific paths, and sharing middleware and controllers to create modular, self-contained routes.
Design RESTful APIs by following the rest pattern: model collections as plural endpoints, use HTTP verbs like GET, POST, PUT, and DELETE, and keep requests stateless to enable caching.
Explore CRUD operations in restful APIs by mapping create, read, update, and delete to HTTP verbs, applied to collections or items, with status codes like 201, 404, 405.
Learn how to serve files with express by using res.sendFile and the path module to build absolute paths to a public folder, delivering images with correct content types.
learn to serve a front-end app with node using express static file middleware to host a public folder, and consider cdns like akamai or cloudfront for scalable delivery.
Learn how Express uses templating engines like handlebars to render dynamic HTML by replacing placeholders marked with curly braces with server data, using app.set and response.render.
Learn handlebars layouts to share common html, replace dynamic body with the body placeholder, and render with res.render, illustrating front-end and back-end separation and mvc concepts.
Build a full-stack API for the NASA mission control project, design the architecture with MVC patterns, and organize a multi-package Node project (server, client) using HTTP and npm.
Set up a React front end for a NASA dashboard with Create React App, npm install, and local host deployment, preparing integration with the back end.
Explore the NASA dashboard functionality for the mission control UI, listing habitable exoplanets by radius under 1.6 Earth radii and stellar flux, and manage launches and history via an API.
Explore the front end structure and how a react-based client interacts with a backend API, gaining a first glimpse of the client folder and project layout.
Explore building a mission control API to power a React front end. Connect endpoints for planets and launches, manage data with hooks and API requests.
Set up a production-ready api server with express, configure port via environment variable (default 8000), and structure code by exporting an express app and creating an http server with middleware.
Create a planets endpoint using an express router, a planets model, and a controller, returning a JSON array and preparing for cross-origin requests.
Apply the cors middleware in express to enable cross-origin requests, configuring access-control-allow-origin with a whitelist (for example http://localhost:3000) and optional dynamic origin checks for production-ready security.
Explore why models stay separate from routers and controllers, how models provide abstraction to shape API data, and why routers and controllers remain one-to-one.
Move Kepler data into the server's data folder, adapt the planet model to export habitable planets filtered by starlight and planetary radius, and wire the API to return them.
Learn to load planets data on startup by awaiting a promise before the server starts listening, ensuring API responses always have the data ready.
Automates full stack by using a root package.json and npm prefix to run server and client scripts in parallel, switching between folders with watch and start commands.
Learn to deploy a React front end with a single Node.js server by building the client, moving the build to the server public folder, and serving via express static.
Explore using Morgan, an express logging middleware, to capture http methods, urls, and user agents, enable log rotation, and place logs early in the middleware chain for development and production.
Design a launches model and collection, tracking mission name, rocket, launch date, destination exoplanet, flight number, upcoming status, and customers and payloads, and export a launches map for the API.
Create a launches router with express to expose a get all launches endpoint, bridging the launches model to a controller and returning json for the upcoming and history pages.
Configure an express server to serve api and front-end on the same port using a catch-all route to index.html for client-side routing with the html5 history API and pushState.
Explore building a data access layer that cleanly separates models and controllers within an MVC architecture. Use data access functions to fetch and format data, improving maintainability and scalability.
Develop a backend launch api by creating a post /launches endpoint that increments flight number, stores the new launch in launches collection, and ensures the launch date is upcoming.
Post /launches to create launches by wiring the add new launch function into the controller, parsing JSON, converting date strings to dates, and returning the created launch with status 201.
Validate POST /launches inputs to prevent errors and ensure required fields—mission, rocket, destination, and launch date—are present; respond with 400 for bad data and 201 for successful launches.
Connects the mission control dashboard front end to the API by posting launch data with fetch, converting to JSON string, and content-type: application/json, while managing success, errors, and pending launches.
Implement a delete endpoint to abort launches by flight number, returning 200 OK on success or 404 not found when the ID is missing, guiding client and server implementation.
Implement abort by marking launches as aborted rather than deleting them, updating upcoming and success flags, and maintaining historical lists with id validation for the dashboard.
Update the architecture diagram to clearly map the NASCAR Dash web app, node API, and npm packages, using dashed lines and color-coding for readability of bidirectional http interactions.
Embrace imposter syndrome as a sign of growth and strengthen learning through practice and teaching others on discord, turning breaks into opportunities to help peers.
Explore API testing in node by focusing on integration tests that validate requests through middleware and handlers, and place them within the testing pyramid alongside unit and automated UI tests.
Learn api testing with Jest and Just, using test runners, fixtures, tests, assertions, and mocking to validate endpoints and keep test data isolated.
Learn to write API tests with the SuperTest library by making GET requests against an Express server, asserting status codes and headers using async/await.
Learn to test post requests for a launches collection using supertest, sending required fields (mission, rockets, target, launch date), verifying json content type and 201 created, and validating date handling.
Test API endpoints with supertest to validate error handling for missing properties and invalid dates. Ensure 400 bad request responses and exact error messages.
Just released with all new NodeJS best practices and trends! Join a live online community of over 900,000+ developers and a course taught by industry experts that have actually worked both in Silicon Valley and Toronto with NodeJS.
Using the latest version of Node, this course is focused on efficiency and turning you into a Back End or Fullstack developer. Never spend time on confusing, out of date, incomplete tutorials anymore! Graduates of Andrei’s courses are now working at Google, Tesla, Amazon, Apple, IBM, JP Morgan, Facebook, + other top tech companies for a reason.
We guarantee you this is the most comprehensive online resource on NodeJS. This project based course will introduce you to all of the modern toolchain of a Node JS developer. Along the way, we will build a massive NASA Space launch application using NodeJS, Express Framework, RESTful APIs, GraphQL, and much more! This is going to be a Fullstack MERN app. We will also build many other mini projects along the way so you feel confident deploying any NodeJS project to production in the future by yourself!
All code is going to be provided step by step and even if you don’t like to code along, you will get access to all the code from the projects we build so anyone signed up for the course will have their own project to put on their portfolio right away.
The curriculum is going to be very hands on as we walk you from start to finish of releasing a professional (performant and secure) NodeJS project all the way into production. We will start from the very beginning by teaching you Node basics and then going into advanced topics so you can make good decisions on architecture and tools on any of your future NodeJS projects. The goal is to turn you into a senior backend developer!
Here is what the course will cover:
1. Foundations
Focus on Node internals
Libuv, threads, processes, event loop
Asynchronous programming
Node vs PHP vs Python
Observer Design Pattern
Event Emitters
2. Module System
The require Function
Creating Your Own Modules
CommonJS vs ECMAScript (ES6) modules
Module Caching
Using index.js
3. Package Management
NPM: The Node Package Manager
Creating Your Own Packages
Package And the NPM Registry
Third Party Modules
The node_modules Folder
Semantic Versioning
package-lock json And Versioning
Vulnerabilities in Dependencies
4. File I/O: Planets Project
Exploring Exoplanets With Node
Exploring Kepler Space Telescope Data
Working With Streams
Streaming Large Data Files
Parsing Our Planets Data
Working With CSV Files
Finding Habitable Planets
5. Web Servers
What is a Web Server?
HTTP Responses and Requests
HTTP APIs and Routing, Parameterized URLs
Same Origin Policy, CORS
Requests and Responses as Streams
6. ExpressJS
Express vs NextJS vs Koa
Route Parameters
Model View Controller (MVC) pattern
Postman and Insomnia
Development Dependencies
Middleware
Logging Middleware Example / Writing Our Own Middleware
POST Requests in Express
MVC In Express
Express Routers
RESTful APIs
CRUD
Sending Files
Serving Websites With Node
Templating Engines
7. NodeJS NASA Project
Architecture diagrams on LucidChart
GET, POST, DELETE routes.
Serving ReactJS Applications in Express
CORS middleware
Models vs Controllers vs Routers
Loading Data On Startup
Automating Full Stack Applications With NPM
Serving React Front End (in Production)
Logging Requests with Morgan
Serving Applications With Client Side Routing
Building A Data Access Layer
Integrating with Frontend, Top Down Approach, Bottom Up Approach
Updating Our Architecture
8. Testing APIs
Unit tests vs API tests vs UI tests
Testing Node APIs with Jest and Supertest
9. Improving Node Performance
Example app which blocks event loop + real life blocking functions
Node Cluster Module theory + in action
Clustering in the real world
Load balancing
PM2 theory + in action
Managing Live Clusters with PM2
Zero Downtime Restarts
Improving Performance of NASA Project
Stateless APIs
Node Worker Threads
10. Databases
Using MongoDB to add persistence to NASA Project
Big focus on NoSQL vs SQL, PostgreSQL vs MongoDB, when to use both including Trends, Object-Relational Mismatch, ACID, References, Schemas. Schema-less vs Schemas
MongoDB Atlas
Horizontally Scaling Databases
Mongoose
Mongoose Models vs MVC Models
ObjectIDs in MongoDB
Pagination
Choosing A Database For Our NASA API
11. Working With REST APIs
Demonstrate integrating with a REST API by working with SpaceX API
Versioning REST APIs
Running Search Queries
SpaceX Launch Data
Mapping API Data to Our Database
Using Paginated APIs
Adding Pagination To Our API
12. Authentication
Focus on Security first principles with JWT, cookies, CSRF
Servers with HTTPS and SSL / TLS
HelmetJS
Working With Auth0
13. Deployment and CI/CD
Focus on building out a simple CI pipeline for NASA Project on GitHub
What is CI vs CD?
Automated tests
Dynamic configuration with secrets
14. Node Production and the Cloud (AWS)
Deploy to production with Docker to Amazon EC2
Virtual Machines
Serverless vs Containers
Docker files
Managing Docker Containers and Images
Working With SSH
Production Deployment with PM2 and Mongo Atlas
15. GraphQL
GraphQL vs REST
Building a GraphQL API
16. Sockets (WebSockets, Socket io)
Sockets overview
Sockets vs polling
WebSockets (vs Socket io)
Socket io Client and Server APIs
Broadcasting Events
Build out Full Stack Multiplayer Pong with Sockets
Implementing Pong Game Logic
Using Socket io With Express.js
Namespaces and Rooms
17-20. Bonus Sections on Deno, Advanced Asynchronous JavaScript, SQL, and TypeScript!
This course is not about making you just code along without understanding the principles so that when you are done with the course you don’t know what to do other than watch another tutorial. No! This course will push you and challenge you to go from an absolute beginner in NodeJS to someone that is in the top 10% of NodeJS backend developers.
We guarantee you this is the most comprehensive online course on NodeJS! Have a look at the course outline video to see all the topics we are going to cover, all the projects we’re going to build, and all the techniques you’re going to learn to become a top Node developer!
See you inside!