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