Mô tả

Join the most comprehensive Node.js course on Udemy and learn Node in both a practical as well as theory-based way!

---

This course was updated to also include sections on Deno.js - in addition to more than 30 hours of content on Node.js!

---

Node.js is probably THE most popular and modern server-side programming language you can dive into these days!

Node.js developers are in high demand and the language is used for everything from traditional web apps with server-side rendered views over REST APIs all the way up to GraphQL APIs and real-time web services. Not to mention its applications in build workflows for projects of all sizes.

This course will teach you all of that! From scratch with zero prior knowledge assumed. Though if you do bring some knowledge, you'll of course be able to quickly jump into the course modules that are most interesting to you.

Here's what you'll learn in this course:

  • Node.js Basics & Basic Core Modules

  • Parsing Requests & Sending Responses

  • Rendering HTML Dynamically (on the Server)

  • Using Express.js

  • Working with Files and generating PDFs on the Server (on-the-fly)

  • File Up- and Download

  • Using the Model-View-Controller (MVC) Pattern

  • Using Node.js with SQL (MySQL) and Sequelize

  • Using Node.js with NoSQL (MongoDB) and Mongoose

  • Working with Sessions & Cookies

  • User Authentication and Authorization

  • Sending E-Mails

  • Validating User Input

  • Data Pagination

  • Handling Payments with Stripe.js

  • Building REST APIs

  • Authentication in REST APIs

  • File Upload in REST APIs

  • Building GraphQL APIs

  • Authentication in GraphQL APIs

  • File Upload in GraphQL APIs

  • Building a Realtime Node.js App with Websockets

  • Automated Testing (Unit Tests)

  • Deploying a Node.js Application

  • Using TypeScript with Node.js

  • Exploring Deno.js

  • And Way More!

Does this look like a lot of content? It certainly is!

This is not a short course but it is the "Complete Guide" on Node.js after all. We'll dive into a lot of topics and we'll not just scratch the surface.

We'll also not just walk through boring theory and some slides. Instead, we'll build two major projects: An online shop (including checkout + payments) and a blog.

All topics and features of the course will be shown and used in these projects and you'll therefore learn about them in a realistic environment.


Is this course for you?

If you got no Node.js experience, you'll love this course because it starts with zero knowledge assumed. It's the perfect course to become a Node.js developer.

If you got basic Node.js experience, this course is also a perfect match because you can go through the basic modules quickly and you'll benefit from all the deep dives and advanced topics the course covers.

Are you an advanced Node.js user? Check the curriculum then. Maybe you found no other course that shows how to use SQL with Node.js. Or you're interested in GraphQL. Chances are, that you'll get a lot of value out of this course, too!


Prerequisites

  • NO Node.js knowledge is required at all!

  • NO other programming language knowledge (besides JavaScript, see next point) is required

  • Basic JavaScript knowledge is assumed though - you should at least be willing to pick it up whilst going through the course. A JS refresher module exists to bring you up to the latest syntax quickly

  • Basic HTML + CSS knowledge helps but is NOT required

Bạn sẽ học được gì

Work with one of the most in-demand web development programming languages

Learn the basics as well as advanced concepts of NodeJS in great detail

Build modern, fast and scalable server-side web applications with NodeJS, databases like SQL or MongoDB and more

Understand the NodeJS ecosystem and build server-side rendered apps, REST APIs and GraphQL APIs

Get a thorough introduction to DenoJS

Yêu cầu

  • General knowledge of how the web works is recommended but not a must-have
  • Basic JavaScript knowledge is strongly recommended but could be picked up whilst going through the course
  • NO NodeJS knowledge is required!

Nội dung khoá học

36 sections

Introduction

9 lectures
Introduction
01:56
What is Node.js?
04:42
Join our Online Learning Community
00:25
Installing Node.js and Creating our First App
09:39
Understanding the Role & Usage of Node.js
07:32
Course Outline
08:03
How To Get The Most Out Of The Course
03:54
Working with the REPL vs Using Files
02:58
Using the Attached Source Code
00:36

Optional: JavaScript - A Quick Refresher

14 lectures
Module Introduction
01:38
JavaScript in a Nutshell
02:38
Refreshing the Core Syntax
04:37
let & const
02:29
Understanding Arrow Functions
05:21
Working with Objects, Properties & Methods
03:23
Arrays & Array Methods
04:19
Arrays, Objects & Reference Types
02:16
Understanding Spread & Rest Operators
06:46
Destructuring
05:40
Async Code & Promises
10:33
Template Literals
00:25
Wrap Up
00:51
Useful Resources & Links
00:04

Understanding the Basics

18 lectures
Module Introduction
01:50
How The Web Works
04:11
Creating a Node Server
13:22
The Node Lifecycle & Event Loop
04:53
Controlling the Node.js Process
00:08
Understanding Requests
03:10
Sending Responses
05:37
Request & Response Headers
00:16
Routing Requests
05:48
Redirecting Requests
04:10
Parsing Request Bodies
11:12
Understanding Event Driven Code Execution
06:00
Blocking and Non-Blocking Code
05:04
Node.js - Looking Behind the Scenes
12:01
Using the Node Modules System
10:05
Wrap Up
05:15
Time to Practice - The Basics
1 question
Useful Resources & Links
00:07

Improved Development Workflow and Debugging

16 lectures
Module Introduction
00:40
Understanding NPM Scripts
07:03
Installing 3rd Party Packages
08:20
Global Features vs Core Modules vs Third-Party Modules
00:42
Using Nodemon for Autorestarts
01:36
Global & Local npm Packages
00:43
Understanding different Error Types
01:49
Finding & Fixing Syntax Errors
03:10
Dealing with Runtime Errors
02:47
Logical Errors
06:32
Using the Debugger
03:10
Restarting the Debugger Automatically After Editing our App
06:21
Debugging Node.js in Visual Studio Code
00:05
Changing Variables in the Debug Console
01:26
Wrap Up
03:14
Useful Resources & Links
00:08

Working with Express.js

23 lectures
Module Introduction
02:15
What is Express.js?
03:43
Installing Express.js
03:47
Adding Middleware
05:13
How Middleware Works
02:58
Express.js - Looking Behind the Scenes
03:42
Handling Different Routes
04:59
Time to Practice - Express.js
1 question
Parsing Incoming Requests
08:00
Limiting Middleware Execution to POST Requests
01:48
Using Express Router
08:04
Adding a 404 Error Page
02:30
Filtering Paths
03:38
Creating HTML Pages
05:09
Serving HTML Pages
07:19
Returning a 404 Page
02:00
A Hint!
00:12
Using a Helper Function for Navigation
03:37
Styling our Pages
13:58
Serving Files Statically
07:49
Time to Practice - Navigation
1 question
Wrap Up
03:36
Useful Resources & Links
00:07

Working with Dynamic Content & Adding Templating Engines

19 lectures
Module Introduction
02:31
Sharing Data Across Requests & Users
08:05
Templating Engines - An Overview
04:40
Installing & Implementing Pug
11:04
Outputting Dynamic Content
11:02
Official Pug Docs
00:03
Converting HTML Files to Pug
05:55
Adding a Layout
05:35
Finishing the Pug Template
05:50
Avoiding an Error
00:12
Working with Handlebars
05:08
Converting our Project to Handlebars
07:41
Adding the Layout to Handlebars
08:41
Working with EJS
08:19
Working on the Layout with Partials
09:33
Wrap Up
03:46
Time to Practice - Templating Engines
1 question
[OPTIONAL] Assignment Solution
25:02
Useful Resources & Links
00:07

The Model View Controller (MVC)

10 lectures
Module Introduction
00:52
What is the MVC?
02:48
Adding Controllers
09:20
Finishing the Controllers
02:37
Adding a Product Model
08:05
Storing Data in Files Via the Model
09:39
Fetching Data from Files Via the Model
03:55
Refactoring the File Storage Code
04:25
Wrap Up
02:15
Useful Resources & Links
00:07

Optional: Enhancing the App

9 lectures
Module Introduction
01:21
Creating the Shop Structure
05:34
Working on the Navigation
02:49
Registering the Routes
11:04
Storing Product Data
05:15
Displaying Product Data
03:02
Editing & Deleting Products
04:47
Adding Another Item
02:08
Useful Resources & Links
00:06

Dynamic Routes & Advanced Models

20 lectures
Module Introduction
01:07
Preparations
01:23
Applied Changes
00:05
Adding the Product ID to the Path
04:34
Extracting Dynamic Params
04:32
Loading Product Detail Data
04:52
Rendering the Product Detail View
05:26
Passing Data with POST Requests
07:19
Adding a Cart Model
12:29
Using Query Params
07:54
Pre-Populating the Edit Product Page with Data
06:46
Linking to the Edit Page
02:20
Editing the Product Data
08:58
Adding the Product-Delete Functionality
05:34
Deleting Cart Items
08:11
Displaying Cart Items on the Cart Page
08:45
Deleting Cart Items
05:24
Fixing a Delete Product Bug
01:31
Wrap Up
01:46
Useful Resources & Links
00:07

SQL Introduction

14 lectures
Module Introduction
01:33
Choosing a Database
04:17
NoSQL Introduction
04:20
Comparing SQL and NoSQL
05:06
Setting Up MySQL
07:16
Connecting our App to the SQL Database
06:50
Basic SQL & Creating a Table
04:07
Retrieving Data
03:00
Fetching Products
06:30
Fetching Products - Time to Practice
01:04
Inserting Data Into the Database
04:12
Fetching a Single Product with the "where" Condition
02:57
Wrap Up
01:24
Useful Resources & Links
00:09

Understanding Sequelize

27 lectures
Module Introduction
01:26
What is Sequelize?
02:34
Connecting to the Database
03:57
Defining a Model
05:47
Syncing JS Definitions to the Database
04:29
Inserting Data & Creating a Product
04:49
MUST READ: findById() in Sequelize 5
00:08
Retrieving Data & Finding Products
03:00
Getting a Single Product with the "where" Condition
04:30
Fetching Admin Products
01:25
Updating Products
05:18
Deleting Products
02:48
Creating a User Model
02:48
Adding a One-To-Many Relationship
05:54
Creating & Managing a Dummy User
06:01
Using Magic Association Methods
03:42
Fetching Related Products
02:46
One-To-Many & Many-To-Many Relations
06:03
Creating & Fetching a Cart
05:45
Adding New Products to the Cart
06:42
Adding Existing Products & Retrieving Cart Items
04:55
Deleting Related Items & Deleting Cart Products
02:24
Adding an Order Model
04:19
Storing Cartitems as Orderitems
08:19
Resetting the Cart & Fetching and Outputting Orders
09:53
Wrap Up
01:49
Useful Resources & Links
00:07

Working with NoSQL & Using MongoDB

33 lectures
Module Introduction
01:17
What is MongoDB?
03:57
Relations in NoSQL
03:58
Setting Up MongoDB
04:48
Installing the MongoDB Driver
07:01
Creating the Database Connection
03:25
Finishing the Database Connection
04:21
Using the Database Connection
05:14
Creating Products
02:08
Understanding the MongoDB Compass
02:38
Fetching All Products
04:34
Fetching a Single Product
07:45
Making the "Edit" & "Delete" Buttons Work Again
02:21
Working on the Product Model to Edit our Product
07:13
Finishing the "Update Product" Code
03:57
One Note About Updating Products
01:46
Deleting Products
03:30
Fixing the "Add Product" Functionality
01:28
Creating New Users
07:00
Storing the User in our Database
05:40
Working on Cart Items & Orders
07:13
Adding the "Add to Cart" Functionality
06:14
Storing Multiple Products in the Cart
07:01
Displaying the Cart Items
09:20
Fixing a Bug
01:02
Deleting Cart Items
04:02
Adding an Order
04:36
Adding Relational Order Data
06:21
Getting Orders
03:20
Removing Deleted Items From the Cart
02:58
Wrap Up
02:19
Useful Resources & Links
00:08
Two Adjustments (behind the scenes)
00:05

Working with Mongoose

21 lectures
Module Introduction
01:23
What is Mongoose?
02:04
Connecting to the MongoDB Server with Mongoose
04:47
Creating the Product Schema
06:01
Saving Data Through Mongoose
06:10
Fetching All Products
02:27
Fetching a Single Product
01:24
Updating Products
04:14
Deleting Products
01:19
Adding and Using a User Model
06:36
Using Relations in Mongoose
03:44
One Important Thing About Fetching Relations
03:53
Working on the Shopping Cart
05:25
Loading the Cart
05:12
Deleting Cart Items
02:45
Creating & Getting Orders
09:56
Storing All Order Related Data
01:52
Clearing the Cart After Storing an Order
01:59
Getting & Displaying the Orders
03:40
Wrap Up
01:37
Useful Resources & Links
00:07

Sessions & Cookies

21 lectures
Module Introduction
00:45
What is a Cookie?
01:57
The Current Project Status
02:18
Optional: Creating the Login Form
06:22
Adding the Request Driven Login Solution
07:40
Setting a Cookie
05:55
Manipulating Cookies
01:58
Configuring Cookies
05:43
What is a Session?
02:58
Initializing the Session Middleware
02:43
Using the Session Middleware
04:14
Using MongoDB to Store Sessions
05:59
Sessions & Cookies - A Short Summary
01:53
Time to Practice - Sessions and Cookies
1 question
Deleting a Cookie
04:35
Fixing Some Minor Bugs
04:27
Making "Add to Cart" Work Again
06:45
Two Tiny Improvements
03:11
Wrap Up
03:43
Code Adjustments
00:06
Useful Resources & Links
00:08

Adding Authentication

21 lectures
Module Introduction
01:22
What is Authentication?
02:25
How is Authentication Implemented?
02:04
Our Updated Project Status
02:25
Implementing an Authentication Flow
07:34
Encrypting Passwords
04:36
Adding a Tiny Code Improvement
01:21
Adding the Signin Functionality
06:21
Working on Route Protection
02:12
Using Middleware to Protect Routes
04:38
Understanding CSRF Attacks
03:23
Using a CSRF Token
06:56
Adding CSRF Protection
04:23
csurf() Alternatives
00:35
Fixing the Order Button
01:16
Providing User Feedback
07:10
Optional: Styling Error Messages
03:32
Finishing the Flash Messages
02:20
Adding Additional Flash Messages
02:20
Wrap Up
02:32
Useful Resources & Links
00:08

Sending Emails

6 lectures
Module Introduction
00:46
How Does Sending Emails Work?
01:34
Using SendGrid
01:24
Using Nodemailer to Send an Email
05:09
Potential Limitation for Large Scale Apps
01:29
Useful Resources & Links
00:07

Advanced Authentication

12 lectures
Module Introduction
00:42
Resetting Passwords
03:03
Implementing the Token Logic
07:40
Creating the Token
01:27
Creating the Reset Password Form
05:27
Adding Logic to Update the Password
06:35
Why we Need Authorization
01:58
Adding Authorization
02:07
Adding Protection to Post Actions
03:43
Why Editing Fails
01:06
Wrap Up
01:45
Useful Resources & Links
00:06

Understanding Validation

18 lectures
Module Introduction
01:03
Why Should We Use Validation?
02:28
How to Validate Input?
04:04
Setup & Basic Validation
10:44
Using Validation Error Messages
02:11
Built-In & Custom Validators
03:55
More Validators
04:26
Checking For Field Equality
03:14
Adding Async Validation
04:46
Time to Practice - Validation
1 question
Keeping User Input
04:11
Adding Conditional CSS Classes
05:29
Adding Validation to Login
05:36
Sanitizing Data
03:41
Validating Product Addition
11:40
Validating Product Editing
06:57
Wrap Up
01:23
Useful Resources & Links
00:08

Error Handling

13 lectures
Module Introduction
00:45
Types of Errors & Error Handling
05:14
Analyzing the Error Handling in the Current Project
02:22
Errors - Some Theory
06:43
Throwing Errors in Code
02:42
Returning Error Pages
06:54
Using the Express.js Error Handling Middleware
05:47
Updating the App
03:09
Using the Error Handling Middleware Correctly
04:54
Status Codes
05:57
Available Status Codes
00:40
Wrap Up
02:21
Useful Resources & Links
00:07

File Upload & Download

19 lectures
Module Introduction
00:54
Adding a File Picker to the Frontend
03:06
Handling Multipart Form Data
05:15
Handling File Uploads with Multer
04:51
Configuring Multer to Adjust Filename & Filepath
04:29
Filtering Files by Mimetype
02:28
Storing File Data in the Database
07:42
Remove imageUrl from "Add Product"
00:14
Serving Images Statically
04:25
Downloading Files with Authentication
07:33
Setting File Type Headers
02:35
Restricting File Access
03:19
Streaming Data vs Preloading Data
03:20
Using PDFKit for .pdf Generation
05:32
Generating .pdf Files with Order Data
06:50
Deleting Files
05:57
Fixing Invoice Links
00:35
Wrap Up
01:31
Useful Resources & Links
00:08

Adding Pagination

9 lectures
Module Introduction
00:48
Adding Pagination Links
04:08
Retrieving a Chunk of Data
03:47
Skip & Limit with SQL
00:22
Preparing Pagination Data on the Server
03:52
Adding Dynamic Pagination Buttons
08:07
Re-Using the Pagination Logic & Controls
03:41
Wrap Up
01:02
Useful Resources & Links
00:06

Understanding Async Requests

7 lectures
Module Introduction
00:48
What are Async Requests?
02:07
Adding Client Side JS Code
07:24
The JSON Data Format
00:21
Sending & Handling Background Requests
09:26
Manipulating the DOM
03:01
Useful Resources & Links
00:08

Adding Payments

5 lectures
Module Introduction
00:58
How Payments Work
02:04
Adding a Checkout Page
06:00
Using Stripe in Your App
19:23
Useful Resources & Links
00:07

Working with REST APIs - The Basics

11 lectures
Module Introduction
01:25
What are REST APIs and why do we use Them?
07:01
Accessing Data with REST APIs
05:41
Understanding Routing & HTTP Methods
05:25
REST APIs - The Core Principles
04:09
Creating our REST API Project & Implementing the Route Setup
06:41
Sending Requests & Responses and Working with Postman
13:28
REST APIs, Clients & CORS Errors
10:33
Sending POST Requests
06:32
Wrap Up
02:14
Useful Resources & Links
00:08

Working with REST APIs - The Practical Application

30 lectures
Module Introduction
01:09
REST APIs & The Rest Of The Course
03:59
Understanding the Frontend Setup
04:17
Planning the API
03:02
Fetching Lists of Posts
06:19
Adding a Create Post Endpoint
07:36
Adding Server Side Validation
06:19
Setting Up a Post Model
05:14
Storing Posts in the Database
03:32
Static Images & Error Handling
06:53
Fetching a Single Post
07:48
Image Names & Windows
00:43
Uploading Images
08:56
Updating Posts
14:02
Deleting Posts
04:16
Adding Pagination
06:20
Adding a User Model
04:08
Adding User Signup Validation
06:29
Signing Users Up
07:24
How Does Authentication Work?
03:10
Starting with User Login
03:51
Logging In & Creating JSON Web Tokens (JWTs)
07:53
Using & Validating the Token
09:43
Adding Auth Middleware to All Routes
01:52
Connecting Posts & Users
06:13
Adding Authorization Checks
03:50
Clearing Post-User Relations
02:54
Time to Practice - Working with REST APIs
1 question
Wrap Up
02:28
Useful Resources & Links
00:06

Understanding Async Await in Node.js

8 lectures
Module Introduction
00:58
What is Async Await All About?
04:08
Transforming "Then Catch" to "Async Await"
04:26
Top-level "await"
01:18
Time to Practice - Async Await
1 question
The User Name is Missing!
00:19
Wrap Up
03:03
Useful Resources & Links
00:07

Understanding Websockets & Socket.io

14 lectures
Module Introduction
00:55
What Are Websockets & Why Would You Use Them?
04:17
Websocket Solutions - An Overview
01:35
Setting Up Socket.io on the Server
03:56
Establishing a Connection From the Client
02:27
Identifying Realtime Potential
02:42
Sharing the IO Instance Across Files
02:46
Synchronizing POST Additions
07:14
Fixing a Bug - The Missing Username
01:44
Updating Posts On All Connected Clients
03:58
Sorting Correctly
00:59
Deleting Posts Across Clients
02:31
Wrap Up
01:48
Useful Resources & Links
00:07

Working with GraphQL

28 lectures
Module Introduction
00:57
What is GraphQL?
09:17
Understanding the Setup & Writing our First Query
11:15
Defining a Mutation Schema
05:42
Adding a Mutation Resolver & GraphiQL
09:42
Adding Input Validation
04:19
Handling Errors
03:45
Connecting the Frontend to the GraphQL API
06:49
Adding a Login Query & a Resolver
06:20
Adding Login Functionality
04:57
Adding a Create Post Mutation
07:23
Extracting User Data From the Auth Token
05:48
Sending the "Create Post" Query
04:46
Fixing a Bug & Adding New Posts Correctly
02:53
Adding a "Get Post" Query & Resolver
04:53
Sending "Create Post" and "Get Post" Queries
05:13
Adding Pagination
04:28
Uploading Images
10:26
Fetching the imageUrl
00:22
Viewing a Single Post
06:07
Updating Posts
09:32
Deleting Posts
09:25
Adding Posts & Pagination
00:25
Managing the User Status
09:17
Using Variables
16:06
Fixing a Pagination Bug
02:48
Wrap Up
03:36
Useful Resources & Links
00:07

Deploying our App

16 lectures
Module Introduction
01:16
Deploying Different Kinds of Apps
01:39
Deployment Preparations
04:52
Using Environment Variables
11:12
Using Production API Keys
01:19
Setting Secure Response Headers with Helmet
02:40
Compressing Assets
02:33
Setting Up Request Logging
03:34
More on Logging
00:11
Setting Up a SSL Server
09:55
Using a Hosting Provider
04:25
Understanding the Project & the Git Setup
04:03
A Deployment Example with Heroku
10:26
Storing User-generated Files on Heroku
00:44
Deploying APIs
02:52
Useful Resources & Links
00:11

Testing Node.js Applications

17 lectures
Module Introduction
00:43
What is Testing?
02:42
Why & How?
03:25
Setup and Writing a First Test
09:40
Testing the Auth Middleware
12:33
Organizing Multiple Tests
04:12
What Not To Test!
08:02
Using Stubs
08:38
Testing Controllers
08:03
Testing Asynchronous Code
05:53
Setting up a Testing Database
06:33
Testing Code With An Active Database
06:33
Cleaning Up
03:29
Hooks
04:34
Testing Code That Requires Authentication
12:37
Wrap Up & Mastering Tests
04:22
Useful Resources & Links
00:01

Node.js as a Build Tool & Using npm

7 lectures
Module Introduction
01:01
npm & Node.js
01:42
Using npm
07:52
Versioning in package.json
00:12
What is a Build Tool?
05:01
Using Node.js in Build Processes
05:50
Useful Resources & Links
00:09

Modern JavaScript & NodeJS

6 lectures
Module Introduction
02:28
What is this Module About?
02:19
Working with ES Modules & Node
09:32
More on ES Modules
06:26
Node Core Modules & Promises
05:18
Module Resources
00:03

NodeJS & TypeScript

21 lectures
Module Introduction
01:22
TypeScript: What & Why?
06:02
TypeScript Setup
04:09
Assigning Types
03:29
Type Inference & Type Casting
06:10
Configuring TypeScript
05:01
Working with Union Types
04:23
Using Object & Array Types
06:17
Working with Type Aliases & Interfaces
03:22
Understanding Generics
05:09
A First Summary
00:34
Node & TypeScript: Setup
02:14
Getting Started with Node and TypeScript
09:31
Writing TypeScript Express.js Code
03:59
Adding REST Routes with TypeScript
06:42
Finishing the REST Routes
05:53
Testing the API
04:52
Using Type Casting
04:21
Moving to a Better Project Structure
03:44
Wrap Up
02:50
Module Resources
00:09

An Introduction to Deno

18 lectures
Module Introduction
01:35
What is Deno?
03:09
Why Deno?
01:55
Deno Setup
05:50
Writing First Deno Code
04:18
The Deno Runtime (Namespace) API
03:13
Using the Runtime API
05:26
Working with Deno Permissions
04:31
Repeating the Example with Node
04:16
How Deno Features Are Organized
04:28
Using the Standard Library
08:30
Creating a Webserver
02:54
Using the Oak Framework with Deno
09:48
More on Module URLs
00:32
An Example Node REST API
12:15
Re-building the REST API with Deno
16:18
Should You Switch From Node to Deno?
05:05
Module Resources
00:02

Deno, CRUD & Databases (MongoDB)

8 lectures
Module Introduction
01:00
App Setup
04:06
Handling CORS Errors
07:16
Connecting Deno to MongoDB
08:05
Using the MongoDB Client Module
10:34
Finishing the Deno MongoDB CRUD Operations
05:29
Wrap Up
01:10
Module Resources
00:02

Roundup

3 lectures
Course Roundup
02:40
Course Slides
00:01
Bonus: More Content!
00:20

Đánh giá của học viên

Chưa có đánh giá
Course Rating
5
0%
4
0%
3
0%
2
0%
1
0%

Bình luận khách hàng

Viết Bình Luận

Bạn đánh giá khoá học này thế nào?

image

Đăng ký get khoá học Udemy - Unica - Gitiho giá chỉ 50k!

Get khoá học giá rẻ ngay trước khi bị fix.