1. Урок 1.00:06:46
    Course Structure and Projects
  2. Урок 2.00:05:26
    Let's Install Node.js
  3. Урок 3.00:00:56
    Section Intro
  4. Урок 4.00:07:40
    What Is Node.js and Why Use It?
  5. Урок 5.00:06:28
    Running Javascript Outside the Browser
  6. Урок 6.00:06:00
    Using Modules 1: Core Modules
  7. Урок 7.00:07:29
    Reading and Writing Files
  8. Урок 8.00:10:14
    Blocking and Non-Blocking: Asynchronous Nature of Node.js
  9. Урок 9.00:14:17
    Reading and Writing Files Asynchronously
  10. Урок 10.00:12:51
    Creating a Simple Web Server
  11. Урок 11.00:15:19
    Routing
  12. Урок 12.00:14:29
    Building a (Very) Simple API
  13. Урок 13.00:14:04
    HTML Templating: Building the Templates
  14. Урок 14.00:20:47
    HTML Templating: Filling the Templates
  15. Урок 15.00:10:24
    Parsing Variables from URLs
  16. Урок 16.00:06:35
    Using Modules 2: Our Own Modules
  17. Урок 17.00:05:18
    Introduction to NPM and the package.json File
  18. Урок 18.00:13:40
    Types of Packages and Installs
  19. Урок 19.00:07:56
    Using Modules 3: 3rd Party Modules
  20. Урок 20.00:11:46
    Package Versioning and Updating
  21. Урок 21.00:11:28
    Setting up Prettier in VS Code
  22. Урок 22.00:02:58
    Recap and What's Next
  23. Урок 23.00:00:47
    Section Intro
  24. Урок 24.00:13:29
    An Overview of How the Web Works
  25. Урок 25.00:05:30
    HTTP in Action
  26. Урок 26.00:06:03
    Front-End vs. Back-End Web Development
  27. Урок 27.00:09:16
    Static vs Dynamic vs API
  28. Урок 28.00:01:25
    Section Intro
  29. Урок 29.00:03:48
    Node, V8, Libuv and C++
  30. Урок 30.00:04:22
    Processes, Threads and the Thread Pool
  31. Урок 31.00:11:34
    The Node.js Event Loop
  32. Урок 32.00:18:51
    The Event Loop in Practice
  33. Урок 33.00:04:19
    Events and Event-Driven Architecture
  34. Урок 34.00:13:55
    Events in Practice
  35. Урок 35.00:06:18
    Introduction to Streams
  36. Урок 36.00:16:07
    Streams in Practice
  37. Урок 37.00:09:40
    How Requiring Modules Really Works
  38. Урок 38.00:15:52
    Requiring Modules in Practice
  39. Урок 39.00:00:58
    Section Intro
  40. Урок 40.00:12:47
    The Problem with Callbacks: Callback Hell
  41. Урок 41.00:06:44
    From Callback Hell to Promises
  42. Урок 42.00:14:43
    Building Promises
  43. Урок 43.00:07:49
    Consuming Promises with Async/Await
  44. Урок 44.00:13:04
    Returning Values from Async Functions
  45. Урок 45.00:06:12
    Waiting for Multiple Promises Simultaneously
  46. Урок 46.00:00:57
    Section Intro
  47. Урок 47.00:02:02
    What is Express?
  48. Урок 48.00:03:27
    Installing Postman
  49. Урок 49.00:14:49
    Setting up Express and Basic Routing
  50. Урок 50.00:16:08
    APIs and RESTful API Design
  51. Урок 51.00:12:20
    Starting Our API: Handling GET Requests
  52. Урок 52.00:15:22
    Handling POST Requests
  53. Урок 53.00:11:49
    Responding to URL Parameters
  54. Урок 54.00:07:06
    Handling PATCH Requests
  55. Урок 55.00:02:41
    Handling DELETE Requests
  56. Урок 56.00:06:48
    Refactoring Our Routes
  57. Урок 57.00:04:49
    Middleware and the Request-Response Cycle
  58. Урок 58.00:09:06
    Creating Our Own Middleware
  59. Урок 59.00:09:36
    Using 3rd-Party Middleware
  60. Урок 60.00:06:58
    Implementing the "Users" Routes
  61. Урок 61.00:08:05
    Creating and Mounting Multiple Routers
  62. Урок 62.00:18:21
    A Better File Structure
  63. Урок 63.00:10:55
    Param Middleware
  64. Урок 64.00:07:35
    Chaining Multiple Middleware Functions
  65. Урок 65.00:05:28
    Serving Static Files
  66. Урок 66.00:16:40
    Environment Variables
  67. Урок 67.00:13:34
    Setting up ESLint + Prettier in VS Code
  68. Урок 68.00:00:49
    Section Intro
  69. Урок 69.00:08:45
    What is MongoDB?
  70. Урок 70.00:06:35
    [OPTIONAL] Installing MongoDB on macOS
  71. Урок 71.00:10:03
    [OPTIONAL] Installing MongoDB on Windows
  72. Урок 72.00:07:40
    [OPTIONAL] Creating a Local Database
  73. Урок 73.00:04:18
    [OPTIONAL] CRUD: Creating Documents
  74. Урок 74.00:12:27
    [OPTIONAL] CRUD: Querying (Reading) Documents
  75. Урок 75.00:07:51
    [OPTIONAL] CRUD: Updating Documents
  76. Урок 76.00:02:48
    [OPTIONAL] CRUD: Deleting Documents
  77. Урок 77.00:07:12
    Using Compass App for CRUD Operations
  78. Урок 78.00:04:28
    Creating a Hosted Database with Atlas
  79. Урок 79.00:07:36
    Connecting to Our Hosted Database
  80. Урок 80.00:00:57
    Section Intro
  81. Урок 81.00:12:25
    Connecting Our Database with the Express App
  82. Урок 82.00:01:54
    What Is Mongoose?
  83. Урок 83.00:07:02
    Creating a Simple Tour Model
  84. Урок 84.00:09:04
    Creating Documents and Testing the Model
  85. Урок 85.00:06:55
    Intro to Back-End Architecture: MVC, Types of Logic, and More
  86. Урок 86.00:06:32
    Refactoring for MVC
  87. Урок 87.00:13:54
    Another Way of Creating Documents
  88. Урок 88.00:08:36
    Reading Documents
  89. Урок 89.00:10:52
    Updating Documents
  90. Урок 90.00:04:10
    Deleting Documents
  91. Урок 91.00:18:14
    Modelling the Tours
  92. Урок 92.00:15:41
    Importing Development Data
  93. Урок 93.00:18:46
    Making the API Better: Filtering
  94. Урок 94.00:12:05
    Making the API Better: Advanced Filtering
  95. Урок 95.00:11:01
    Making the API Better: Sorting
  96. Урок 96.00:06:20
    Making the API Better: Limiting Fields
  97. Урок 97.00:15:00
    Making the API Better: Pagination
  98. Урок 98.00:08:57
    Making the API Better: Aliasing
  99. Урок 99.00:15:39
    Refactoring API Features
  100. Урок 100.00:20:38
    Aggregation Pipeline: Matching and Grouping
  101. Урок 101.00:19:29
    Aggregation Pipeline: Unwinding and Projecting
  102. Урок 102.00:06:24
    Virtual Properties
  103. Урок 103.00:14:30
    Document Middleware
  104. Урок 104.00:13:55
    Query Middleware
  105. Урок 105.00:07:43
    Aggregation Middleware
  106. Урок 106.00:10:07
    Data Validation: Built-In Validators
  107. Урок 107.00:14:03
    Data Validation: Custom Validators
  108. Урок 108.00:00:42
    Section Intro
  109. Урок 109.00:20:30
    Debugging Node.js with ndb
  110. Урок 110.00:07:51
    Handling Unhandled Routes
  111. Урок 111.00:03:37
    An Overview of Error Handling
  112. Урок 112.00:09:00
    Implementing a Global Error Handling Middleware
  113. Урок 113.00:11:14
    Better Errors and Refactoring
  114. Урок 114.00:14:55
    Catching Errors in Async Functions
  115. Урок 115.00:09:07
    Adding 404 Not Found Errors
  116. Урок 116.00:10:31
    Errors During Development vs Production
  117. Урок 117.00:09:43
    Handling Invalid Database IDs
  118. Урок 118.00:06:05
    Handling Duplicate Database Fields
  119. Урок 119.00:08:25
    Handling Mongoose Validation Errors
  120. Урок 120.00:08:50
    Errors Outside Express: Unhandled Rejections
  121. Урок 121.00:09:17
    Catching Uncaught Exceptions
  122. Урок 122.00:00:59
    Section Intro
  123. Урок 123.00:10:01
    Modelling Users
  124. Урок 124.00:11:20
    Creating New Users
  125. Урок 125.00:18:25
    Managing Passwords
  126. Урок 126.00:08:47
    How Authentication with JWT Works
  127. Урок 127.00:16:02
    Signing up Users
  128. Урок 128.00:26:36
    Logging in Users
  129. Урок 129.00:14:58
    Protecting Tour Routes - Part 1
  130. Урок 130.00:35:15
    Protecting Tour Routes - Part 2
  131. Урок 131.00:11:36
    Advanced Postman Setup
  132. Урок 132.00:15:55
    Authorization: User Roles and Permissions
  133. Урок 133.00:17:04
    Password Reset Functionality: Reset Token
  134. Урок 134.00:23:05
    Sending Emails with Nodemailer
  135. Урок 135.00:21:34
    Password Reset Functionality: Setting New Password
  136. Урок 136.00:16:37
    Updating the Current User: Password
  137. Урок 137.00:20:12
    Updating the Current User: Data
  138. Урок 138.00:10:29
    Deleting the Current User
  139. Урок 139.00:10:14
    Security Best Practices
  140. Урок 140.00:09:47
    Sending JWT via Cookie
  141. Урок 141.00:07:05
    Implementing Rate Limiting
  142. Урок 142.00:05:20
    Setting Security HTTP Headers
  143. Урок 143.00:09:16
    Data Sanitization
  144. Урок 144.00:08:21
    Preventing Parameter Pollution
  145. Урок 145.00:01:03
    Section Intro
  146. Урок 146.00:24:40
    MongoDB Data Modelling
  147. Урок 147.00:10:58
    Designing Our Data Model
  148. Урок 148.00:12:26
    Modelling Locations (Geospatial Data)
  149. Урок 149.00:07:49
    Modelling Tour Guides: Embedding
  150. Урок 150.00:04:57
    Modelling Tour Guides: Child Referencing
  151. Урок 151.00:10:43
    Populating Tour Guides
  152. Урок 152.00:08:32
    Modelling Reviews: Parent Referencing
  153. Урок 153.00:17:04
    Creating and Getting Reviews
  154. Урок 154.00:06:07
    Populating Reviews
  155. Урок 155.00:12:03
    Virtual Populate: Tours and Reviews
  156. Урок 156.00:13:30
    Implementing Simple Nested Routes
  157. Урок 157.00:08:01
    Nested Routes with Express
  158. Урок 158.00:05:07
    Adding a Nested GET Endpoint
  159. Урок 159.00:14:22
    Building Handler Factory Functions: Delete
  160. Урок 160.00:13:23
    Factory Functions: Update and Create
  161. Урок 161.00:14:43
    Factory Functions: Reading
  162. Урок 162.00:04:43
    Adding a /me Endpoint
  163. Урок 163.00:14:45
    Adding Missing Authentication and Authorization
  164. Урок 164.00:07:27
    Importing Review and User Data
  165. Урок 165.00:16:12
    Improving Read Performance with Indexes
  166. Урок 166.00:22:26
    Calculating Average Rating on Tours - Part 1
  167. Урок 167.00:15:58
    Calculating Average Rating on Tours - Part 2
  168. Урок 168.00:09:30
    Preventing Duplicate Reviews
  169. Урок 169.00:29:54
    Geospatial Queries: Finding Tours Within Radius
  170. Урок 170.00:16:29
    Geospatial Aggregation: Calculating Distances
  171. Урок 171.00:10:38
    Creating API Documentation Using Postman
  172. Урок 172.00:00:57
    Section Intro
  173. Урок 173.00:05:17
    Recap: Server-Side vs Client-Side Rendering
  174. Урок 174.00:10:09
    Setting up Pug in Express
  175. Урок 175.00:14:38
    First Steps with Pug
  176. Урок 176.00:15:25
    Creating Our Base Template
  177. Урок 177.00:04:46
    Including Files into Pug Templates
  178. Урок 178.00:10:07
    Extending Our Base Template with Blocks
  179. Урок 179.00:05:58
    Setting up the Project Structure
  180. Урок 180.00:11:38
    Building the Tour Overview - Part 1
  181. Урок 181.00:15:54
    Building the Tour Overview - Part 2
  182. Урок 182.00:20:29
    Building the Tour Page - Part 1
  183. Урок 183.00:25:51
    Building the Tour Page - Part 2
  184. Урок 184.00:11:34
    Including a Map with Mapbox - Part 1
  185. Урок 185.00:27:52
    Including a Map with Mapbox - Part 2
  186. Урок 186.00:06:31
    Building the Login Screen
  187. Урок 187.00:20:54
    Logging in Users with Our API - Part 1
  188. Урок 188.00:18:40
    Logging in Users with Our API - Part 2
  189. Урок 189.00:28:16
    Logging in Users with Our API - Part 3
  190. Урок 190.00:13:57
    Logging out Users
  191. Урок 191.00:21:46
    Rendering Error Pages
  192. Урок 192.00:16:06
    Building the User Account Page
  193. Урок 193.00:17:08
    Updating User Data
  194. Урок 194.00:12:35
    Updating User Data with Our API
  195. Урок 195.00:14:43
    Updating User Password with Our API
  196. Урок 196.00:00:33
    Section Intro
  197. Урок 197.00:10:13
    Image Uploads Using Multer: Users
  198. Урок 198.00:13:47
    Configuring Multer
  199. Урок 199.00:05:33
    Saving Image Name to Database
  200. Урок 200.00:13:20
    Resizing Images
  201. Урок 201.00:11:34
    Adding Image Uploads to Form
  202. Урок 202.00:12:03
    Uploading Multiple Images: Tours
  203. Урок 203.00:18:12
    Processing Multiple Images
  204. Урок 204.00:19:59
    Building a Complex Email Handler
  205. Урок 205.00:15:09
    Email Templates with Pug: Welcome Emails
  206. Урок 206.00:07:08
    Sending Password Reset Emails
  207. Урок 207.00:09:33
    Using Sendgrid for "Real" Emails
  208. Урок 208.00:10:09
    Credit Card Payments with Stripe
  209. Урок 209.00:22:35
    Integrating Stripe into the Back-End
  210. Урок 210.00:23:05
    Processing Payments on the Front-End
  211. Урок 211.00:06:24
    Modelling the Bookings
  212. Урок 212.00:19:09
    Creating New Bookings on Checkout Success
  213. Урок 213.00:11:17
    Rendering a User's Booked Tours
  214. Урок 214.00:07:13
    Finishing the Bookings API
  215. Урок 215.00:07:29
    Final Considerations
  216. Урок 216.00:00:41
    Section Intro
  217. Урок 217.00:04:39
    Setting Up Git and GitHub
  218. Урок 218.00:10:34
    Git Fundamentals
  219. Урок 219.00:10:29
    Pushing to GitHub
  220. Урок 220.00:10:56
    Preparing Our App for Deployment
  221. Урок 221.00:26:31
    Deploying Our App to Heroku
  222. Урок 222.00:05:53
    Testing for Secure HTTPS Connections
  223. Урок 223.00:07:22
    Responding to a SIGTERM Signal
  224. Урок 224.00:15:54
    Implementing CORS
  225. Урок 225.00:38:09
    Finishing Payments with Stripe Webhooks
  226. Урок 226.00:03:40
    Where to Go from Here