React, NodeJS, Express & MongoDB - The MERN Fullstack Guide
Build fullstack React.js applications with Node.js, Express.js & MongoDB (MERN) with this project-focused course.
Start courseBuilding fullstack applications (i.e. frontend + backend) with the MERN stack is very popular - in this course, you will learn it from scratch at the example of a complete project!
MERN stands for MongoDB, Express.js, React.js and Node.js - and combined, these four technologies allow you to build amazing web applications.
In this course, we'll build an entire project and you will learn how these different technologies work together step by step. We'll first have a look at all the individual building blocks, so that we then can also combine them all into one amazing application by the end of the course.
This course also doesn't stop after the basics - instead, you'll also learn how to add file upload, authentication, authorization and how to deploy your application in different ways to different hosting services.
This course is taught by two instructors - Max (React.js, Node/ Express) and Manuel (MongoDB) who have years of experience of working with these technologies and teaching them to other people. We took and combined our experiences to deliver you the best possible MERN stack course you can find out there.
In detail, this course offers:
- Brief refreshers on the core technologies (React, Node, Express, MongoDB)
- Project sections for each technology where the theoretic knowledge is applied
- Detailed theory about the MERN stack and the different ways of combining the technologies
- A complete course project where all the technologies come together into one application
- File (image) upload in both React.js (sending the file) and Node/ Express (receiving the file)
- User authentication (signup + login)
- User authorization (controlling access to certain resources)
- Detailed deployment instructions - including different ways of deploying the application
- Tons of quizzes and extra resources!
By the end of this course, you'll feel comfortable building your own MERN stack applications and you can build up on all the knowledge taught throughout this course to dive into your own projects and use-cases.
Course content
Section 1First Section
- Introduction1:47
- What is the "MERN Stack"?7:31
- MERN - A First Overview2:11
- Join our Online Learning Community1:00
- Course Outline2:13
- How To Get The Most Out Of The Course2:52
- Using the Course Resources1:00
Section 2The MERN Stack - Theory
- Module IntroductionPremium1:18
- Understanding the Big PicturePremium8:04
- Diving Into the FrontendPremium4:06
- Understanding the BackendPremium5:10
- REST vs GraphQLPremium7:54
- Connecting Node & ReactPremium5:50
- Quiz 1: MERN - EssentialsPremium1:00
- Creating our Development Environment & the Development ServersPremium11:24
- Diving Deeper Into the CodePremium9:45
- Useful Resources & LinksPremium1:00
Section 3Planning the App
- Module Introduction4:50
- Understanding the General App Idea2:35
- Sketching out the Frontend9:37
- Data & API Endpoints used in our App5:19
- Required SPA Pages for the Frontend2:56
Section 4React.js - A Refresher
- Module IntroductionPremium1:12
- What is React?Premium3:13
- Setting Up a Starting ProjectPremium4:03
- Understanding JSXPremium5:31
- Understanding ComponentsPremium2:50
- Working with Multiple ComponentsPremium7:04
- Using Props to pass Data between ComponentsPremium6:52
- Rendering Lists of DataPremium4:30
- Handling EventsPremium7:24
- Efficient Child<=>Parent CommunicationPremium4:38
- Working with "State"Premium5:54
- More on StatePremium4:20
- Fetching User Input (Two-way Binding)Premium5:52
- Quiz 2: React.js BasicsPremium1:00
- Wrap UpPremium2:11
- Useful Resources & LinksPremium1:00
Section 5React.js - Building the Frontend
- Module IntroductionPremium2:32
- Starting Setup, Pages & RoutesPremium17:03
- Adding a UsersList Page / ComponentPremium9:29
- Adding a UserItem ComponentPremium3:41
- Styling our App & More ComponentsPremium7:17
- Presentational vs Stateful ComponentsPremium3:22
- Adding a Main HeaderPremium9:46
- Adding NavlinksPremium5:05
- Implementing a Basic Desktop & Mobile NavigationPremium4:21
- Understanding PortalsPremium3:00
- Handling the Drawer StatePremium4:07
- Animating the SidedrawerPremium5:14
- Rendering User Places & Using Dynamic Route SegmentsPremium16:12
- Getting Route ParamsPremium2:16
- Adding Custom ButtonsPremium2:53
- Adding a ModalPremium17:26
- Rendering a Map with Google MapsPremium14:36
- Continuing without a Credit CardPremium1:00
- Optional: More on the useEffect() HookPremium1:00
- Adding a Custom Form Input ComponentPremium9:42
- Managing State in the Input ComponentPremium11:51
- Adding Input ValidationPremium8:02
- Sharing Input Values & Adding Multiple InputsPremium8:11
- Managing Form-wide StatePremium9:11
- Finishing the "Add Place" FormPremium3:19
- Starting Work on the "Update Place" PagePremium8:45
- Adjusting the Input ComponentPremium2:38
- Creating a Custom Form Hook (useForm)Premium11:02
- Optional: More on (Custom) React HooksPremium1:00
- Adjusting the Form HookPremium11:19
- Fixing Minor IssuesPremium4:32
- Showing a Deletion WarningPremium5:27
- Adding an "Auth" Page & Login FormPremium9:05
- Adding Signup + "Switch Mode" ButtonPremium11:18
- Adding Auth Context for App-wide State ManagementPremium7:04
- Listening to Context ChangesPremium2:11
- Adding Authenticated & Unauthenticated RoutesPremium5:49
- More Auth Context UsagePremium2:44
- Wrap UpPremium1:08
- Useful Resources & LinksPremium1:00
Section 6Node.js & Express.js - A Refresher
- Module IntroductionPremium1:40
- What is Node.js?Premium2:55
- Writing our First Node.js CodePremium8:20
- Sending Requests & ResponsesPremium13:34
- What is Express.js?Premium1:15
- Adding Express.jsPremium11:39
- Understanding the Advantages of Express.jsPremium8:32
- Quiz 3: Node & Express BasicsPremium1:00
- How Code Execution WorksPremium3:16
- Useful Resources & LinksPremium1:00
Section 7Node.js & Express.js - Building our REST API
- Module IntroductionPremium2:17
- Setting up our ProjectPremium2:29
- Implementing Basic RoutingPremium11:21
- Adding Place-Specific RoutesPremium9:39
- Getting a Place By User IDPremium4:37
- Handling ErrorsPremium10:51
- Adding our own Error ModelPremium4:45
- Adding ControllersPremium6:42
- Adding a POST Route & Using PostmanPremium13:21
- Handling Errors for Unsupported RoutesPremium2:13
- Adding Patch Routes to Update PlacesPremium8:03
- Deleting PlacesPremium4:07
- Finalizing the "Get Places by User ID" ResourcePremium2:44
- Setting Up the User Routes (Signup, Login, Get Users)Premium13:23
- Validating API Input (Request Bodies)Premium10:19
- Validating Patch Requests & User RoutesPremium6:14
- Using Google's Geocoding API to Convert an Address Into CoordinatesPremium16:20
- Wrap UpPremium1:27
- Useful Resources & LinksPremium1:00
Section 8Working with MongoDB & Mongoose - A Refresher
- Module IntroductionPremium1:15
- What is MongoDB?Premium1:26
- SQL vs NoSQLPremium3:41
- Connecting React to a Database?Premium1:44
- Setting Up MongoDBPremium5:26
- Creating a Simple Backend & Connecting it to the DatabasePremium5:50
- Creating a Document with MongoDBPremium7:52
- Getting Data from the DatabasePremium6:11
- Installing MongoosePremium1:31
- Understanding Models & SchemasPremium3:51
- Creating a ProductPremium3:23
- Connecting to the Database & Saving the ProductPremium7:28
- Getting ProductsPremium4:12
- Understanding the ObjectIDPremium3:18
- Wrap UpPremium1:42
- Useful Resources & LinksPremium1:00
Section 9Connecting the Backend to the Database - MongoDB & Mongoose
- Module IntroductionPremium1:27
- Installing Mongoose & Connecting our Backend to MongoDBPremium6:32
- Creating the Place Schema & ModelPremium6:34
- Creating & Storing Documents in the DatabasePremium7:26
- Getting Places by the PlaceIDPremium8:07
- Getting Places by the UserIDPremium5:53
- Updating PlacesPremium6:10
- Deleting PlacesPremium3:43
- How Users & Places are RelatedPremium1:34
- Creating the User ModelPremium6:27
- Using the User Model for SignupPremium11:43
- Adding the User LoginPremium4:19
- Getting UsersPremium5:37
- Adding the Relation between Places & UsersPremium5:03
- Creating Places & Adding it to a UserPremium13:59
- Deleting Places & Removing it From the UserPremium7:47
- Getting Places - An AlternativePremium5:38
- Cleaning Up our CodePremium2:32
- Wrap UpPremium1:43
- Useful Resources & LinksPremium1:00
Section 10Connecting the React.js Frontend to the Backend
- Module IntroductionPremium1:31
- Initial SetupPremium1:01
- Sending a POST Request to the BackendPremium10:30
- Optional: The fetch() APIPremium1:00
- Handling CORS ErrorsPremium6:58
- Getting Started with Error HandlingPremium7:59
- Proper Error Handling in the FrontendPremium5:05
- Sending a Login RequestPremium3:35
- Getting Users with a GET RequestPremium10:22
- Creating a Custom Http HookPremium10:50
- Improving the Custom Http HookPremium8:29
- Using the Http Hook to GET UsersPremium3:47
- Adding Places (POST)Premium13:06
- Loading Places by User IdPremium7:59
- Updating PlacesPremium12:23
- Deleting PlacesPremium7:40
- Fixing NavLinks & "My Places"Premium1:06
- Final AdjustmentsPremium3:42
- Useful Resources & LinksPremium1:00
Section 11Adding File Upload
- Module IntroductionPremium1:13
- Building an ImageUpload ComponentPremium10:36
- Finishing & Using the ImageUpload Component (in a Form)Premium12:16
- On the Backend: Using Multer to Save FilesPremium8:52
- Filtering Files on the Backend (Images Only!)Premium3:03
- Wiring Frontend and Backend UpPremium5:09
- Connecting Users to ImagesPremium6:19
- Serving Images StaticallyPremium3:33
- Uploading Images for New PlacesPremium6:08
- Deleting Images When Places Get DeletedPremium2:59
- Wrap UpPremium1:32
- Useful Resources & LinksPremium1:00
Section 12Adding Authentication
- Module IntroductionPremium1:08
- How Authentication Works (in a MERN App)Premium5:01
- Hashing the User PasswordPremium5:31
- Logging Users In (with Hashed Passwords)Premium3:10
- Generating Tokens (JWT) on the BackendPremium9:01
- Backend Route Protection with Auth MiddlewarePremium12:48
- Using & Attaching JWT (Tokens) in ReactPremium7:17
- Using Tokens to Update and Delete PlacesPremium2:26
- Adding AuthorizationPremium7:35
- Authorization on "Delete Places"Premium3:01
- Storing the Token in the Browser StoragePremium6:09
- Adding Auto-Login (Basic Version)Premium5:13
- Managing the Token Expiration DatePremium4:54
- Finished Auto-Login & Auto-LogoutPremium8:03
- Creating a Custom Authentication HookPremium3:45
- Authentication - SummaryPremium1:49
- General App ImprovementsPremium4:40
- Quiz 4: Authentication & AuthorizationPremium1:00
- Useful Resources & LinksPremium1:00
Section 13Application Deployment
- Module IntroductionPremium0:55
- Deployment Steps OverviewPremium2:29
- Using Environment Variables (Node.js)Premium8:25
- Environment Variables in React AppsPremium7:26
- Preparing API Keys & CredentialsPremium5:47
- Building the React AppPremium4:31
- Adding Code Splitting to ReactPremium7:14
- Understanding Possible Deployment AlternativesPremium3:49
- Deploying a Standalone REST API (Example: Heroku)Premium10:46
- Deploying a Standalone React SPA (Example: Firebase Hosting)Premium9:12
- Fixing Style IssuesPremium1:35
- Deploying a Combined AppPremium10:24
- Storing Files/ UploadsPremium2:20
- Wrap UpPremium0:45
Section 14Roundup & Next Steps
- Course RoundupPremium3:26
Course instructor
Maximilian Schwarzmüller
As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.
The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.