Download link
File List
-
文件过大导致无法格式化,将以元数据展示。
[{"path": "28 Working with GraphQL/436 Using Variables.mp4", "length": 172433707}, {"path": "23 Adding Payments/351 Using Stripe in Your App.mp4", "length": 151033289}, {"path": "05 Working with Express.js/072 Styling our Pages.mp4", "length": 149166202}, {"path": "25 Working with REST APIs - The Practical Application/376 Updating Posts.mp4", "length": 143115133}, {"path": "01 Introduction/003 Installing Node.js and Creating our First App.mp4", "length": 125670008}, {"path": "09 Dynamic Routes Advanced Models/119 Adding a Cart Model.mp4", "length": 124472800}, {"path": "01 Introduction/004 Understanding the Role Usage of Node.js.mp4", "length": 121600009}, {"path": "06 Working with Dynamic Content Adding Templating Engines/080 Outputting Dynamic Content.mp4", "length": 116781764}, {"path": "08 Optional Enhancing the App/105 Registering the Routes.mp4", "length": 116027341}, {"path": "18 Understanding Validation/296 Validating Product Addition.mp4", "length": 112026481}, {"path": "28 Working with GraphQL/429 Uploading Images.mp4", "length": 111881722}, {"path": "06 Working with Dynamic Content Adding Templating Engines/079 Installing Implementing Pug.mp4", "length": 110427503}, {"path": "29 Deploying our App/443 Using Environment Variables.mp4", "length": 110320941}, {"path": "28 Working with GraphQL/432 Updating Posts.mp4", "length": 108847434}, {"path": "18 Understanding Validation/286 Setup Basic Validation.mp4", "length": 103744889}, {"path": "01 Introduction/005 Course Outline.mp4", "length": 101451550}, {"path": "06 Working with Dynamic Content Adding Templating Engines/087 Adding the Layout to Handlebars.mp4", "length": 100285647}, {"path": "28 Working with GraphQL/433 Deleting Posts.mp4", "length": 99950210}, {"path": "06 Working with Dynamic Content Adding Templating Engines/089 Working on the Layout with Partials.mp4", "length": 99827025}, {"path": "25 Working with REST APIs - The Practical Application/385 Using Validating the Token.mp4", "length": 98395330}, {"path": "11 Understanding Sequelize/168 Resetting the Cart Fetching and Outputting Orders.mp4", "length": 96893849}, {"path": "28 Working with GraphQL/435 Managing the User Status.mp4", "length": 96451984}, {"path": "09 Dynamic Routes Advanced Models/123 Editing the Product Data.mp4", "length": 96315050}, {"path": "07 The Model View Controller (MVC)/097 Storing Data in Files Via the Model.mp4", "length": 95383484}, {"path": "06 Working with Dynamic Content Adding Templating Engines/086 Converting our Project to Handlebars.mp4", "length": 91160026}, {"path": "06 Working with Dynamic Content Adding Templating Engines/088 Working with EJS.mp4", "length": 91150687}, {"path": "13 Working with Mongoose/219 Creating Getting Orders.mp4", "length": 90647924}, {"path": "10 SQL Introduction/135 Setting Up MySQL.mp4", "length": 90634663}, {"path": "22 Understanding Async Requests/345 Sending Handling Background Requests.mp4", "length": 88545572}, {"path": "24 Working with REST APIs - The Basics/359 Sending Requests Responses and Working with Postman.mp4", "length": 87614811}, {"path": "03 Understanding the Basics/037 Using the Node Modules System.mp4", "length": 87321784}, {"path": "29 Deploying our App/452 A Deployment Example with Heroku.mp4", "length": 87184477}, {"path": "28 Working with GraphQL/414 Understanding the Setup Writing our First Query.mp4", "length": 86035317}, {"path": "28 Working with GraphQL/416 Adding a Mutation Resolver GraphiQL.mp4", "length": 85624511}, {"path": "20 File Upload Download/319 Storing File Data in the Database.mp4", "length": 84074638}, {"path": "12 Working with NoSQL Using MongoDB/194 Displaying the Cart Items.mp4", "length": 83098262}, {"path": "09 Dynamic Routes Advanced Models/125 Deleting Cart Items.mp4", "length": 82614897}, {"path": "03 Understanding the Basics/033 Parsing Request Bodies.mp4", "length": 82430999}, {"path": "21 Adding Pagination/337 Adding Dynamic Pagination Buttons.mp4", "length": 81921433}, {"path": "11 Understanding Sequelize/167 Storing Cartitems as Orderitems.mp4", "length": 81912828}, {"path": "09 Dynamic Routes Advanced Models/126 Displaying Cart Items on the Cart Page.mp4", "length": 81640442}, {"path": "17 Advanced Authentication/273 Implementing the Token Logic.mp4", "length": 80009741}, {"path": "07 The Model View Controller (MVC)/094 Adding Controllers.mp4", "length": 79752274}, {"path": "05 Working with Express.js/073 Serving Files Statically.mp4", "length": 79466976}, {"path": "14 Sessions Cookies/229 Adding the Request Driven Login Solution.mp4", "length": 79127211}, {"path": "09 Dynamic Routes Advanced Models/118 Passing Data with POST Requests.mp4", "length": 78616136}, {"path": "01 Introduction/002 What is Node.js.mp4", "length": 77359566}, {"path": "20 File Upload Download/322 Downloading Files with Authentication.mp4", "length": 77031034}, {"path": "29 Deploying our App/449 Setting Up a SSL Server.mp4", "length": 76803561}, {"path": "25 Working with REST APIs - The Practical Application/374 Fetching a Single Post.mp4", "length": 76668271}, {"path": "25 Working with REST APIs - The Practical Application/375 Uploading Images.mp4", "length": 76639135}, {"path": "20 File Upload Download/327 Generating .pdf Files with Order Data.mp4", "length": 76582284}, {"path": "18 Understanding Validation/297 Validating Product Editing.mp4", "length": 76061792}, {"path": "15 Adding Authentication/256 Using a CSRF Token.mp4", "length": 74524045}, {"path": "28 Working with GraphQL/422 Adding a Create Post Mutation.mp4", "length": 74413278}, {"path": "17 Advanced Authentication/276 Adding Logic to Update the Password.mp4", "length": 74021035}, {"path": "15 Adding Authentication/249 Implementing an Authentication Flow.mp4", "length": 73869065}, {"path": "09 Dynamic Routes Advanced Models/121 Pre-Populating the Edit Product Page with Data.mp4", "length": 73775540}, {"path": "15 Adding Authentication/259 Providing User Feedback.mp4", "length": 73585810}, {"path": "25 Working with REST APIs - The Practical Application/381 Signing Users Up.mp4", "length": 72098186}, {"path": "27 Understanding Websockets Socket.io/405 Synchronizing POST Additions.mp4", "length": 72036078}, {"path": "25 Working with REST APIs - The Practical Application/384 Logging In Creating JSON Web Tokens (JWTs).mp4", "length": 71177916}, {"path": "14 Sessions Cookies/240 Making Add to Cart Work Again.mp4", "length": 70685501}, {"path": "25 Working with REST APIs - The Practical Application/373 Static Images Error Handling.mp4", "length": 70579243}, {"path": "12 Working with NoSQL Using MongoDB/184 Working on the Product Model to Edit our Product.mp4", "length": 70515408}, {"path": "19 Error Handling/305 Returning Error Pages.mp4", "length": 70307524}, {"path": "06 Working with Dynamic Content Adding Templating Engines/077 Sharing Data Across Requests Users.mp4", "length": 70121152}, {"path": "05 Working with Express.js/063 Parsing Incoming Requests.mp4", "length": 69807207}, {"path": "20 File Upload Download/328 Deleting Files.mp4", "length": 69165699}, {"path": "11 Understanding Sequelize/163 Adding New Products to the Cart.mp4", "length": 68685840}, {"path": "22 Understanding Async Requests/343 Adding Client Side JS Code.mp4", "length": 68551826}, {"path": "13 Working with Mongoose/213 Adding and Using a User Model.mp4", "length": 68549016}, {"path": "28 Working with GraphQL/419 Connecting the Frontend to the GraphQL API.mp4", "length": 66746509}, {"path": "14 Sessions Cookies/228 Optional Creating the Login Form.mp4", "length": 66633763}, {"path": "12 Working with NoSQL Using MongoDB/182 Fetching a Single Product.mp4", "length": 66552140}, {"path": "14 Sessions Cookies/236 Using MongoDB to Store Sessions.mp4", "length": 66397565}, {"path": "28 Working with GraphQL/423 Extracting User Data From the Auth Token.mp4", "length": 66179428}, {"path": "07 The Model View Controller (MVC)/096 Adding a Product Model.mp4", "length": 65917039}, {"path": "19 Error Handling/306 Using the Express.js Error Handling Middleware.mp4", "length": 65790228}, {"path": "11 Understanding Sequelize/158 Creating Managing a Dummy User.mp4", "length": 65662094}, {"path": "25 Working with REST APIs - The Practical Application/369 Adding a Create Post Endpoint.mp4", "length": 65611084}, {"path": "11 Understanding Sequelize/161 One-To-Many Many-To-Many Relations.mp4", "length": 65271850}, {"path": "12 Working with NoSQL Using MongoDB/191 Working on Cart Items Orders.mp4", "length": 65223221}, {"path": "20 File Upload Download/326 Using PDFKit for .pdf Generation.mp4", "length": 64837074}, {"path": "05 Working with Express.js/069 Serving HTML Pages.mp4", "length": 64423341}, {"path": "05 Working with Express.js/065 Using Express Router.mp4", "length": 64352350}, {"path": "25 Working with REST APIs - The Practical Application/380 Adding User Signup Validation.mp4", "length": 64229737}, {"path": "02 Optional JavaScript - A Quick Refresher/019 Async Code Promises.mp4", "length": 63903087}, {"path": "04 Improved Development Workflow and Debugging/042 Installing 3rd Party Packages.mp4", "length": 63891121}, {"path": "06 Working with Dynamic Content Adding Templating Engines/082 Converting HTML Files to Pug.mp4", "length": 63761384}, {"path": "28 Working with GraphQL/431 Viewing a Single Post.mp4", "length": 63523792}, {"path": "24 Working with REST APIs - The Basics/360 REST APIs Clients CORS Errors.mp4", "length": 62836789}, {"path": "11 Understanding Sequelize/162 Creating Fetching a Cart.mp4", "length": 62558875}, {"path": "15 Adding Authentication/252 Adding the Signin Functionality.mp4", "length": 62437163}, {"path": "17 Advanced Authentication/275 Creating the Reset Password Form.mp4", "length": 62365123}, {"path": "25 Working with REST APIs - The Practical Application/387 Connecting Posts Users.mp4", "length": 62316267}, {"path": "28 Working with GraphQL/420 Adding a Login Query a Resolver.mp4", "length": 62139670}, {"path": "23 Adding Payments/350 Adding a Checkout Page.mp4", "length": 62032568}, {"path": "12 Working with NoSQL Using MongoDB/193 Storing Multiple Products in the Cart.mp4", "length": 61989882}, {"path": "30 Node.js as a Build Tool Using npm/458 Using npm.mp4", "length": 61859568}, {"path": "12 Working with NoSQL Using MongoDB/175 Installing the MongoDB Driver.mp4", "length": 61690019}, {"path": "06 Working with Dynamic Content Adding Templating Engines/084 Finishing the Pug Template.mp4", "length": 61532278}, {"path": "19 Error Handling/303 Errors - Some Theory.mp4", "length": 61412239}, {"path": "13 Working with Mongoose/208 Saving Data Through Mongoose.mp4", "length": 59972754}, {"path": "10 SQL Introduction/139 Fetching Products.mp4", "length": 59719652}, {"path": "30 Node.js as a Build Tool Using npm/461 Using Node.js in Build Processes.mp4", "length": 58667379}, {"path": "25 Working with REST APIs - The Practical Application/378 Adding Pagination.mp4", "length": 58504979}, {"path": "01 Introduction/006 How To Get The Most Out Of The Course.mp4", "length": 58484601}, {"path": "13 Working with Mongoose/207 Creating the Product Schema.mp4", "length": 58014198}, {"path": "25 Working with REST APIs - The Practical Application/368 Fetching Lists of Posts.mp4", "length": 57995191}, {"path": "09 Dynamic Routes Advanced Models/117 Rendering the Product Detail View.mp4", "length": 57991053}, {"path": "24 Working with REST APIs - The Basics/361 Sending POST Requests.mp4", "length": 57771122}, {"path": "04 Improved Development Workflow and Debugging/049 Logical Errors.mp4", "length": 57162770}, {"path": "12 Working with NoSQL Using MongoDB/189 Creating New Users.mp4", "length": 56969346}, {"path": "04 Improved Development Workflow and Debugging/051 Restarting the Debugger Automatically After Editing our App.mp4", "length": 56676598}, {"path": "13 Working with Mongoose/216 Working on the Shopping Cart.mp4", "length": 56193200}, {"path": "12 Working with NoSQL Using MongoDB/198 Adding Relational Order Data.mp4", "length": 56142712}, {"path": "03 Understanding the Basics/025 Creating a Node Server.mp4", "length": 55932275}, {"path": "08 Optional Enhancing the App/106 Storing Product Data.mp4", "length": 55860923}, {"path": "18 Understanding Validation/294 Adding Validation to Login.mp4", "length": 55774164}, {"path": "18 Understanding Validation/293 Adding Conditional CSS Classes.mp4", "length": 55701012}, {"path": "25 Working with REST APIs - The Practical Application/370 Adding Server Side Validation.mp4", "length": 55228281}, {"path": "12 Working with NoSQL Using MongoDB/192 Adding the Add to Cart Functionality.mp4", "length": 54903537}, {"path": "12 Working with NoSQL Using MongoDB/178 Using the Database Connection.mp4", "length": 54535058}, {"path": "13 Working with Mongoose/217 Loading the Cart.mp4", "length": 54506512}, {"path": "03 Understanding the Basics/034 Understanding Event Driven Code Execution.mp4", "length": 53854630}, {"path": "20 File Upload Download/316 Handling File Uploads with Multer.mp4", "length": 53842985}, {"path": "19 Error Handling/308 Using the Error Handling Middleware Correctly.mp4", "length": 53660335}, {"path": "06 Working with Dynamic Content Adding Templating Engines/083 Adding a Layout.mp4", "length": 53591353}, {"path": "11 Understanding Sequelize/157 Adding a One-To-Many Relationship.mp4", "length": 53406599}, {"path": "28 Working with GraphQL/427 Sending Create Post and Get Post Queries.mp4", "length": 53346968}, {"path": "11 Understanding Sequelize/148 Defining a Model.mp4", "length": 53110053}, {"path": "09 Dynamic Routes Advanced Models/127 Deleting Cart Items.mp4", "length": 52953547}, {"path": "09 Dynamic Routes Advanced Models/124 Adding the Product-Delete Functionality.mp4", "length": 52286384}, {"path": "11 Understanding Sequelize/154 Updating Products.mp4", "length": 52137827}, {"path": "16 Sending Emails/268 Using Nodemailer to Send an Email.mp4", "length": 52072527}, {"path": "12 Working with NoSQL Using MongoDB/190 Storing the User in our Database.mp4", "length": 51757401}, {"path": "03 Understanding the Basics/036 Node.js - Looking Behind the Scenes.mp4", "length": 51416681}, {"path": "28 Working with GraphQL/421 Adding Login Functionality.mp4", "length": 51330992}, {"path": "11 Understanding Sequelize/152 Getting a Single Product with the where Condition.mp4", "length": 51280337}, {"path": "06 Working with Dynamic Content Adding Templating Engines/085 Working with Handlebars.mp4", "length": 51212563}, {"path": "20 File Upload Download/315 Handling Multipart Form Data.mp4", "length": 50568355}, {"path": "28 Working with GraphQL/424 Sending the Create Post Query.mp4", "length": 50080805}, {"path": "02 Optional JavaScript - A Quick Refresher/017 Understanding Spread Rest Operators.mp4", "length": 49683804}, {"path": "11 Understanding Sequelize/150 Inserting Data Creating a Product.mp4", "length": 48959063}, {"path": "03 Understanding the Basics/031 Routing Requests.mp4", "length": 48731218}, {"path": "26 Understanding Async Await in Node.js/394 Transforming Then Catch to Async Await.mp4", "length": 48449690}, {"path": "28 Working with GraphQL/426 Adding a Get Post Query Resolver.mp4", "length": 48434855}, {"path": "14 Sessions Cookies/232 Configuring Cookies.mp4", "length": 48272722}, {"path": "14 Sessions Cookies/230 Setting a Cookie.mp4", "length": 48178488}, {"path": "28 Working with GraphQL/415 Defining a Mutation Schema.mp4", "length": 47903972}, {"path": "20 File Upload Download/317 Configuring Multer to Adjust Filename Filepath.mp4", "length": 47505652}, {"path": "13 Working with Mongoose/206 Connecting to the MongoDB Server with Mongoose.mp4", "length": 47439068}, {"path": "18 Understanding Validation/291 Adding Async Validation.mp4", "length": 47438869}, {"path": "10 SQL Introduction/136 Connecting our App to the SQL Database.mp4", "length": 47200743}, {"path": "11 Understanding Sequelize/164 Adding Existing Products Retrieving Cart Items.mp4", "length": 47072956}, {"path": "28 Working with GraphQL/428 Adding Pagination.mp4", "length": 46808178}, {"path": "25 Working with REST APIs - The Practical Application/371 Setting Up a Post Model.mp4", "length": 46601767}, {"path": "09 Dynamic Routes Advanced Models/116 Loading Product Detail Data.mp4", "length": 46598141}, {"path": "03 Understanding the Basics/035 Blocking and Non-Blocking Code.mp4", "length": 46498675}, {"path": "09 Dynamic Routes Advanced Models/120 Using Query Params.mp4", "length": 46356956}, {"path": "20 File Upload Download/321 Serving Images Statically.mp4", "length": 45763437}, {"path": "04 Improved Development Workflow and Debugging/041 Understanding NPM Scripts.mp4", "length": 45612168}, {"path": "03 Understanding the Basics/029 Sending Responses.mp4", "length": 45611077}, {"path": "08 Optional Enhancing the App/103 Creating the Shop Structure.mp4", "length": 45597034}, {"path": "08 Optional Enhancing the App/108 Editing Deleting Products.mp4", "length": 45358892}, {"path": "07 The Model View Controller (MVC)/099 Refactoring the File Storage Code.mp4", "length": 45353757}, {"path": "13 Working with Mongoose/211 Updating Products.mp4", "length": 44912746}, {"path": "15 Adding Authentication/257 Adding CSRF Protection.mp4", "length": 44905478}, {"path": "09 Dynamic Routes Advanced Models/115 Extracting Dynamic Params.mp4", "length": 44578039}, {"path": "27 Understanding Websockets Socket.io/407 Updating Posts On All Connected Clients.mp4", "length": 44366360}, {"path": "28 Working with GraphQL/417 Adding Input Validation.mp4", "length": 44267038}, {"path": "05 Working with Express.js/062 Handling Different Routes.mp4", "length": 43985116}, {"path": "25 Working with REST APIs - The Practical Application/377 Deleting Posts.mp4", "length": 43964074}, {"path": "06 Working with Dynamic Content Adding Templating Engines/090 Wrap Up.mp4", "length": 43187654}, {"path": "20 File Upload Download/324 Restricting File Access.mp4", "length": 43037521}, {"path": "11 Understanding Sequelize/149 Syncing JS Definitions to the Database.mp4", "length": 42898229}, {"path": "18 Understanding Validation/292 Keeping User Input.mp4", "length": 42687695}, {"path": "02 Optional JavaScript - A Quick Refresher/018 Destructuring.mp4", "length": 42029596}, {"path": "15 Adding Authentication/254 Using Middleware to Protect Routes.mp4", "length": 41916595}, {"path": "29 Deploying our App/447 Setting Up Request Logging.mp4", "length": 41810814}, {"path": "19 Error Handling/309 Status Codes.mp4", "length": 41540243}, {"path": "21 Adding Pagination/336 Preparing Pagination Data on the Server.mp4", "length": 41302121}, {"path": "18 Understanding Validation/288 Built-In Custom Validators.mp4", "length": 40860282}, {"path": "28 Working with GraphQL/418 Handling Errors.mp4", "length": 40852235}, {"path": "13 Working with Mongoose/215 One Important Thing About Fetching Relations.mp4", "length": 40819544}, {"path": "07 The Model View Controller (MVC)/098 Fetching Data from Files Via the Model.mp4", "length": 40505853}, {"path": "09 Dynamic Routes Advanced Models/114 Adding the Product ID to the Path.mp4", "length": 40406204}, {"path": "12 Working with NoSQL Using MongoDB/181 Fetching All Products.mp4", "length": 40300312}, {"path": "12 Working with NoSQL Using MongoDB/196 Deleting Cart Items.mp4", "length": 40286006}, {"path": "25 Working with REST APIs - The Practical Application/379 Adding a User Model.mp4", "length": 40017358}, {"path": "24 Working with REST APIs - The Basics/358 Creating our REST API Project Implementing the Route Setup.mp4", "length": 39931872}, {"path": "27 Understanding Websockets Socket.io/401 Setting Up Socket.io on the Server.mp4", "length": 39929857}, {"path": "11 Understanding Sequelize/159 Using Magic Association Methods.mp4", "length": 39840331}, {"path": "12 Working with NoSQL Using MongoDB/197 Adding an Order.mp4", "length": 39667787}, {"path": "14 Sessions Cookies/239 Fixing Some Minor Bugs.mp4", "length": 39556865}, {"path": "19 Error Handling/307 Updating the App.mp4", "length": 39373209}, {"path": "05 Working with Express.js/068 Creating HTML Pages.mp4", "length": 39323787}, {"path": "18 Understanding Validation/289 More Validators.mp4", "length": 39096708}, {"path": "14 Sessions Cookies/238 Deleting a Cookie.mp4", "length": 39060239}, {"path": "12 Working with NoSQL Using MongoDB/174 Setting Up MongoDB.mp4", "length": 39052906}, {"path": "11 Understanding Sequelize/166 Adding an Order Model.mp4", "length": 38547354}, {"path": "14 Sessions Cookies/235 Using the Session Middleware.mp4", "length": 37882508}, {"path": "15 Adding Authentication/260 Optional Styling Error Messages.mp4", "length": 37700477}, {"path": "21 Adding Pagination/338 Re-Using the Pagination Logic Controls.mp4", "length": 37675171}, {"path": "01 Introduction/007 Working with the REPL vs Using FIles.mp4", "length": 37673213}, {"path": "10 SQL Introduction/141 Inserting Data Into the Database.mp4", "length": 37417747}, {"path": "17 Advanced Authentication/279 Adding Protection to Post Actions.mp4", "length": 37158230}, {"path": "12 Working with NoSQL Using MongoDB/185 Finishing the Update Product Code.mp4", "length": 36733158}, {"path": "18 Understanding Validation/295 Sanitizing Data.mp4", "length": 36725598}, {"path": "02 Optional JavaScript - A Quick Refresher/013 Understanding Arrow Functions.mp4", "length": 36546022}, {"path": "21 Adding Pagination/334 Retrieving a Chunk of Data.mp4", "length": 36434197}, {"path": "21 Adding Pagination/333 Adding Pagination Links.mp4", "length": 35805823}, {"path": "25 Working with REST APIs - The Practical Application/383 Starting with User Login.mp4", "length": 35778179}, {"path": "12 Working with NoSQL Using MongoDB/177 Finishing the Database Connection.mp4", "length": 35767688}, {"path": "31 Roundup/463 Course Roundup.mp4", "length": 35419810}, {"path": "13 Working with Mongoose/214 Using Relations in Mongoose.mp4", "length": 35380891}, {"path": "01 Introduction/001 Introduction.mp4", "length": 35030857}, {"path": "05 Working with Express.js/061 Express.js - Looking Behind the Scenes.mp4", "length": 34805731}, {"path": "26 Understanding Async Await in Node.js/393 What is Async Await All About.mp4", "length": 34793137}, {"path": "30 Node.js as a Build Tool Using npm/460 What is a Build Tool.mp4", "length": 34760117}, {"path": "28 Working with GraphQL/413 What is GraphQL.mp4", "length": 34499518}, {"path": "05 Working with Express.js/059 Adding Middleware.mp4", "length": 34489690}, {"path": "20 File Upload Download/325 Streaming Data vs Preloading Data.mp4", "length": 34461150}, {"path": "03 Understanding the Basics/032 Redirecting Requests.mp4", "length": 34146381}, {"path": "13 Working with Mongoose/222 Getting Displaying the Orders.mp4", "length": 34111036}, {"path": "15 Adding Authentication/250 Encrypting Passwords.mp4", "length": 33884542}, {"path": "25 Working with REST APIs - The Practical Application/372 Storing Posts in the Database.mp4", "length": 33818744}, {"path": "26 Understanding Async Await in Node.js/396 Wrap Up.mp4", "length": 33644657}, {"path": "25 Working with REST APIs - The Practical Application/388 Adding Authorization Checks.mp4", "length": 33538301}, {"path": "12 Working with NoSQL Using MongoDB/187 Deleting Products.mp4", "length": 33229421}, {"path": "25 Working with REST APIs - The Practical Application/367 Planning the API.mp4", "length": 32821667}, {"path": "25 Working with REST APIs - The Practical Application/366 Understanding the Frontend Setup.mp4", "length": 32545571}, {"path": "17 Advanced Authentication/272 Resetting Passwords.mp4", "length": 32334230}, {"path": "05 Working with Express.js/067 Filtering Paths.mp4", "length": 32114959}, {"path": "24 Working with REST APIs - The Basics/354 What are REST APIs and why do we use Them.mp4", "length": 31822616}, {"path": "28 Working with GraphQL/437 Fixing a Pagination Bug.mp4", "length": 31810339}, {"path": "04 Improved Development Workflow and Debugging/050 Using the Debugger.mp4", "length": 31341911}, {"path": "10 SQL Introduction/138 Retrieving Data.mp4", "length": 31139051}, {"path": "03 Understanding the Basics/038 Wrap Up.mp4", "length": 31044419}, {"path": "05 Working with Express.js/071 Using a Helper Function for Navigation.mp4", "length": 30217963}, {"path": "11 Understanding Sequelize/160 Fetching Related Products.mp4", "length": 30035220}, {"path": "10 SQL Introduction/137 Basic SQL Creating a Table.mp4", "length": 29772431}, {"path": "18 Understanding Validation/290 Checking For Field Equality.mp4", "length": 29708497}, {"path": "12 Working with NoSQL Using MongoDB/199 Getting Orders.mp4", "length": 29223779}, {"path": "14 Sessions Cookies/234 Initializing the Session Middleware.mp4", "length": 29164099}, {"path": "12 Working with NoSQL Using MongoDB/176 Creating the Database Connection.mp4", "length": 29160767}, {"path": "11 Understanding Sequelize/151 Retrieving Data Finding Products.mp4", "length": 29160545}, {"path": "13 Working with Mongoose/218 Deleting Cart Items.mp4", "length": 29151495}, {"path": "08 Optional Enhancing the App/104 Working on the Navigation.mp4", "length": 29071831}, {"path": "20 File Upload Download/318 Filtering Files by Mimetype.mp4", "length": 28831224}, {"path": "25 Working with REST APIs - The Practical Application/389 Clearing Post-User Relations.mp4", "length": 28723784}, {"path": "29 Deploying our App/446 Compressing Assets.mp4", "length": 28541805}, {"path": "04 Improved Development Workflow and Debugging/048 Dealing with Runtime Errors.mp4", "length": 28171258}, {"path": "02 Optional JavaScript - A Quick Refresher/015 Arrays Array Methods.mp4", "length": 28032033}, {"path": "27 Understanding Websockets Socket.io/402 Establishing a Connection From the Client.mp4", "length": 27955611}, {"path": "27 Understanding Websockets Socket.io/409 Deleting Posts Across Clients.mp4", "length": 27936987}, {"path": "10 SQL Introduction/142 Fetching a Single Product with the where Condition.mp4", "length": 27881663}, {"path": "29 Deploying our App/445 Setting Secure Response Headers with Helmet.mp4", "length": 27739168}, {"path": "05 Working with Express.js/058 Installing Express.js.mp4", "length": 27739137}, {"path": "20 File Upload Download/323 Setting File Type Headers.mp4", "length": 27615856}, {"path": "22 Understanding Async Requests/346 Manipulating the DOM.mp4", "length": 27427513}, {"path": "03 Understanding the Basics/028 Understanding Requests.mp4", "length": 27424528}, {"path": "28 Working with GraphQL/425 Fixing a Bug Adding New Posts Correctly.mp4", "length": 27130090}, {"path": "11 Understanding Sequelize/165 Deleting Related Items Deleting Cart Products.mp4", "length": 26762866}, {"path": "11 Understanding Sequelize/147 Connecting to the Database.mp4", "length": 26005440}, {"path": "19 Error Handling/302 Analyzing the Error Handling in the Current Project.mp4", "length": 25907796}, {"path": "08 Optional Enhancing the App/107 Displaying Product Data.mp4", "length": 25672460}, {"path": "14 Sessions Cookies/241 Two Tiny Improvements.mp4", "length": 25553006}, {"path": "27 Understanding Websockets Socket.io/403 Identifying Realtime Potential.mp4", "length": 25489571}, {"path": "11 Understanding Sequelize/156 Creating a User Model.mp4", "length": 25472326}, {"path": "29 Deploying our App/451 Understanding the Project the Git Setup.mp4", "length": 25438397}, {"path": "04 Improved Development Workflow and Debugging/047 Finding Fixing Syntax Errors.mp4", "length": 25425850}, {"path": "09 Dynamic Routes Advanced Models/122 Linking to the Edit Page.mp4", "length": 25302210}, {"path": "11 Understanding Sequelize/155 Deleting Products.mp4", "length": 24853112}, {"path": "13 Working with Mongoose/209 Fetching All Products.mp4", "length": 24636458}, {"path": "02 Optional JavaScript - A Quick Refresher/011 Refreshing the Core Syntax.mp4", "length": 24476704}, {"path": "27 Understanding Websockets Socket.io/404 Sharing the IO Instance Across Files.mp4", "length": 24011386}, {"path": "05 Working with Express.js/060 How Middleware Works.mp4", "length": 23942567}, {"path": "05 Working with Express.js/074 Wrap Up.mp4", "length": 22339014}, {"path": "12 Working with NoSQL Using MongoDB/179 Creating Products.mp4", "length": 22308104}, {"path": "19 Error Handling/304 Throwing Errors in Code.mp4", "length": 22265464}, {"path": "29 Deploying our App/442 Deployment Preparations.mp4", "length": 22016619}, {"path": "18 Understanding Validation/287 Using Validation Error Messages.mp4", "length": 21989250}, {"path": "15 Adding Authentication/262 Adding Additional Flash Massages.mp4", "length": 21975228}, {"path": "12 Working with NoSQL Using MongoDB/183 Making the Edit Delete Buttons Work Again.mp4", "length": 21858702}, {"path": "05 Working with Express.js/066 Adding a 404 Error Page.mp4", "length": 21833327}, {"path": "07 The Model View Controller (MVC)/095 Finishing the Controllers.mp4", "length": 21553392}, {"path": "20 File Upload Download/314 Adding a File Picker to the Frontend.mp4", "length": 21369861}, {"path": "03 Understanding the Basics/026 The Node Lifecycle Event Loop.mp4", "length": 21327619}, {"path": "14 Sessions Cookies/227 The Current Project Status.mp4", "length": 21252482}, {"path": "25 Working with REST APIs - The Practical Application/386 Adding Auth Middleware to All Routes.mp4", "length": 21224038}, {"path": "12 Working with NoSQL Using MongoDB/200 Removing Deleted Items From the Cart.mp4", "length": 20886396}, {"path": "08 Optional Enhancing the App/109 Adding Another Item.mp4", "length": 20884502}, {"path": "04 Improved Development Workflow and Debugging/054 Wrap Up.mp4", "length": 20837556}, {"path": "25 Working with REST APIs - The Practical Application/365 REST APIs The Rest Of The Course.mp4", "length": 20825526}, {"path": "28 Working with GraphQL/438 Wrap Up.mp4", "length": 20769181}, {"path": "13 Working with Mongoose/221 Clearing the Cart After Storing an Order.mp4", "length": 20733917}, {"path": "10 SQL Introduction/134 Comparing SQL and NoSQL.mp4", "length": 20693508}, {"path": "24 Working with REST APIs - The Basics/355 Accessing Data with REST APIs.mp4", "length": 20238188}, {"path": "20 File Upload Download/330 Wrap Up.mp4", "length": 20187958}, {"path": "24 Working with REST APIs - The Basics/356 Understanding Routing HTTP Methods.mp4", "length": 20083411}, {"path": "14 Sessions Cookies/237 Sessions Cookies - A Short Summary.mp4", "length": 19732803}, {"path": "14 Sessions Cookies/242 Wrap Up.mp4", "length": 19285327}, {"path": "15 Adding Authentication/261 Finishing the Flash Messages.mp4", "length": 18743433}, {"path": "15 Adding Authentication/253 Working on Route Protection.mp4", "length": 18588404}, {"path": "12 Working with NoSQL Using MongoDB/173 Relations in NoSQL.mp4", "length": 18584825}, {"path": "29 Deploying our App/454 Deploying APIs.mp4", "length": 18497714}, {"path": "17 Advanced Authentication/278 Adding Authorization.mp4", "length": 18472752}, {"path": "19 Error Handling/301 Types of Errors Error Handling.mp4", "length": 18105684}, {"path": "05 Working with Express.js/070 Returning a 404 Page.mp4", "length": 17876710}, {"path": "02 Optional JavaScript - A Quick Refresher/012 let const.mp4", "length": 17841085}, {"path": "13 Working with Mongoose/220 Storing All Order Related Data.mp4", "length": 17660748}, {"path": "15 Adding Authentication/248 Our Updated Project Status.mp4", "length": 17634485}, {"path": "27 Understanding Websockets Socket.io/406 Fixing a Bug - The Missing Username.mp4", "length": 17593356}, {"path": "12 Working with NoSQL Using MongoDB/180 Understanding the MongoDB Compass.mp4", "length": 17194254}, {"path": "02 Optional JavaScript - A Quick Refresher/014 Working with Objects Properties Methods.mp4", "length": 17045707}, {"path": "12 Working with NoSQL Using MongoDB/186 One Note About Updating Products.mp4", "length": 16748987}, {"path": "29 Deploying our App/450 Using a Hosting Provider.mp4", "length": 16689083}, {"path": "24 Working with REST APIs - The Basics/357 REST APIs - The Core Principles.mp4", "length": 16181241}, {"path": "09 Dynamic Routes Advanced Models/128 Fixing a Delete Product Bug.mp4", "length": 16141826}, {"path": "10 SQL Introduction/133 NoSQL Introduction.mp4", "length": 16109876}, {"path": "05 Working with Express.js/064 Limiting Middleware Execution to POST Requests.mp4", "length": 15971565}, {"path": "18 Understanding Validation/298 Wrap Up.mp4", "length": 15146667}, {"path": "27 Understanding Websockets Socket.io/410 Wrap Up.mp4", "length": 15020998}, {"path": "16 Sending Emails/269 Potential Limitation for Large Scale Apps.mp4", "length": 14742243}, {"path": "13 Working with Mongoose/212 Deleting Products.mp4", "length": 13741334}, {"path": "13 Working with Mongoose/223 Wrap Up.mp4", "length": 13722881}, {"path": "15 Adding Authentication/251 Adding a Tiny Code Improvement.mp4", "length": 13677416}, {"path": "18 Understanding Validation/285 How to Validate Input.mp4", "length": 13639896}, {"path": "16 Sending Emails/267 Using SendGrid.mp4", "length": 13360458}, {"path": "11 Understanding Sequelize/153 Fetching Admin Products.mp4", "length": 13351149}, {"path": "04 Improved Development Workflow and Debugging/053 Changing Variables in the Debug Console.mp4", "length": 13217418}, {"path": "27 Understanding Websockets Socket.io/400 Websocket Solutions - An Overview.mp4", "length": 13166136}, {"path": "02 Optional JavaScript - A Quick Refresher/016 Arrays Objects Reference Types.mp4", "length": 13121362}, {"path": "04 Improved Development Workflow and Debugging/044 Using Nodemon for Autorestarts.mp4", "length": 12967728}, {"path": "03 Understanding the Basics/024 How The Web Works.mp4", "length": 12909125}, {"path": "15 Adding Authentication/263 Wrap Up.mp4", "length": 12815036}, {"path": "13 Working with Mongoose/210 Fetching a Single Product.mp4", "length": 12745132}, {"path": "12 Working with NoSQL Using MongoDB/188 Fixing the Add Product Functionality.mp4", "length": 12544427}, {"path": "10 SQL Introduction/132 Choosing a Database.mp4", "length": 12407787}, {"path": "15 Adding Authentication/255 Understanding CSRF Attacks.mp4", "length": 12316040}, {"path": "10 SQL Introduction/143 Wrap Up.mp4", "length": 12214182}, {"path": "06 Working with Dynamic Content Adding Templating Engines/078 Templating Engines - An Overview.mp4", "length": 12018502}, {"path": "12 Working with NoSQL Using MongoDB/201 Wrap Up.mp4", "length": 11966584}, {"path": "19 Error Handling/311 Wrap Up.mp4", "length": 11928544}, {"path": "27 Understanding Websockets Socket.io/399 What Are Websockets Why Would You Use Them.mp4", "length": 11905767}, {"path": "05 Working with Express.js/057 What is Express.js.mp4", "length": 11854019}, {"path": "15 Adding Authentication/258 Fixing the Order Button.mp4", "length": 11608796}, {"path": "25 Working with REST APIs - The Practical Application/390 Wrap Up.mp4", "length": 11542657}, {"path": "17 Advanced Authentication/274 Creating the Token.mp4", "length": 11216719}, {"path": "17 Advanced Authentication/277 Why we Need Authorization.mp4", "length": 11043650}, {"path": "24 Working with REST APIs - The Basics/362 Wrap Up.mp4", "length": 10860379}, {"path": "12 Working with NoSQL Using MongoDB/172 What is MongoDB.mp4", "length": 10695812}, {"path": "14 Sessions Cookies/231 Manipulating Cookies.mp4", "length": 10574442}, {"path": "29 Deploying our App/444 Using Production API Keys.mp4", "length": 10250179}, {"path": "10 SQL Introduction/140 Fetching Products - Time to Practice.mp4", "length": 10052129}, {"path": "21 Adding Pagination/339 Wrap Up.mp4", "length": 9694507}, {"path": "07 The Model View Controller (MVC)/093 What is the MVC.mp4", "length": 9430755}, {"path": "07 The Model View Controller (MVC)/100 Wrap Up.mp4", "length": 9276595}, {"path": "12 Working with NoSQL Using MongoDB/195 Fixing a Bug.mp4", "length": 8923536}, {"path": "02 Optional JavaScript - A Quick Refresher/010 JavaScript in a Nutshell.mp4", "length": 8908194}, {"path": "27 Understanding Websockets Socket.io/408 Sorting Correctly.mp4", "length": 8868980}, {"path": "11 Understanding Sequelize/169 Wrap Up.mp4", "length": 8696519}, {"path": "09 Dynamic Routes Advanced Models/129 Wrap Up.mp4", "length": 8178615}, {"path": "14 Sessions Cookies/233 What is a Session.mp4", "length": 8053322}, {"path": "11 Understanding Sequelize/145 Module Introduction.mp4", "length": 7953235}, {"path": "15 Adding Authentication/246 What is Authentication.mp4", "length": 7887079}, {"path": "25 Working with REST APIs - The Practical Application/382 How Does Authentication Work.mp4", "length": 7876128}, {"path": "09 Dynamic Routes Advanced Models/112 Preparations.mp4", "length": 7606512}, {"path": "11 Understanding Sequelize/146 What is Sequelize.mp4", "length": 7591795}, {"path": "13 Working with Mongoose/205 What is Mongoose.mp4", "length": 7006286}, {"path": "17 Advanced Authentication/281 Wrap Up.mp4", "length": 6739930}, {"path": "06 Working with Dynamic Content Adding Templating Engines/076 Module Introduction.mp4", "length": 6467015}, {"path": "17 Advanced Authentication/280 Why Editing Fails.mp4", "length": 6314666}, {"path": "23 Adding Payments/349 How Payments Work.mp4", "length": 6298935}, {"path": "15 Adding Authentication/247 How is Authentication Implemented.mp4", "length": 6269789}, {"path": "20 File Upload Download/329 Fixing Invoice Links.mp4", "length": 6216247}, {"path": "04 Improved Development Workflow and Debugging/046 Understanding different Error Types.mp4", "length": 5870024}, {"path": "22 Understanding Async Requests/342 What are Async Requests.mp4", "length": 5770813}, {"path": "29 Deploying our App/441 Deploying Different Kinds of Apps.mp4", "length": 5659630}, {"path": "18 Understanding Validation/284 Why Should We Use Validation.mp4", "length": 5530203}, {"path": "03 Understanding the Basics/023 Module Introduction.mp4", "length": 5428513}, {"path": "05 Working with Express.js/056 Module Introduction.mp4", "length": 5256493}, {"path": "14 Sessions Cookies/226 What is a Cookie.mp4", "length": 4598659}, {"path": "02 Optional JavaScript - A Quick Refresher/021 Wrap Up.mp4", "length": 4499125}, {"path": "10 SQL Introduction/131 Module Introduction.mp4", "length": 3854821}, {"path": "16 Sending Emails/266 How Does Sending Emails Work.mp4", "length": 3495586}, {"path": "30 Node.js as a Build Tool Using npm/457 npm Node.js.mp4", "length": 3477046}, {"path": "24 Working with REST APIs - The Basics/353 Module Introduction.mp4", "length": 3425957}, {"path": "12 Working with NoSQL Using MongoDB/171 Module Introduction.mp4", "length": 3366054}, {"path": "02 Optional JavaScript - A Quick Refresher/009 Module Introduction.mp4", "length": 3317704}, {"path": "15 Adding Authentication/245 Module Introduction.mp4", "length": 3153676}, {"path": "08 Optional Enhancing the App/102 Module Introduction.mp4", "length": 3139780}, {"path": "29 Deploying our App/440 Module Introduction.mp4", "length": 3105719}, {"path": "25 Working with REST APIs - The Practical Application/364 Module Introduction.mp4", "length": 2947631}, {"path": "09 Dynamic Routes Advanced Models/111 Module Introduction.mp4", "length": 2896606}, {"path": "13 Working with Mongoose/204 Module Introduction.mp4", "length": 2892340}, {"path": "22 Understanding Async Requests/343 01-adding-client-side-code.zip", "length": 2717322}, {"path": "22 Understanding Async Requests/347 01-adding-client-side-code.zip", "length": 2717322}, {"path": "21 Adding Pagination/338 04-re-using-pagination-logic.zip", "length": 2717205}, {"path": "21 Adding Pagination/340 04-re-using-pagination-logic.zip", "length": 2717205}, {"path": "20 File Upload Download/327 06-generating-pdf-files-with-order-data.zip", "length": 2640737}, {"path": "20 File Upload Download/331 06-generating-pdf-files-with-order-data.zip", "length": 2640737}, {"path": "21 Adding Pagination/336 02-preparing-pagination-data-on-the-server.zip", "length": 2602145}, {"path": "21 Adding Pagination/340 02-preparing-pagination-data-on-the-server.zip", "length": 2602145}, {"path": "21 Adding Pagination/337 03-adding-dynamic-pagination-buttons.zip", "length": 2600404}, {"path": "21 Adding Pagination/340 03-adding-dynamic-pagination-buttons.zip", "length": 2600404}, {"path": "21 Adding Pagination/333 01-adding-pagination-links.zip", "length": 2597194}, {"path": "21 Adding Pagination/340 01-adding-pagination-links.zip", "length": 2597194}, {"path": "20 File Upload Download/329 08-fixing-invoice-links.zip", "length": 2596191}, {"path": "20 File Upload Download/331 08-fixing-invoice-links.zip", "length": 2596191}, {"path": "27 Understanding Websockets Socket.io/398 Module Introduction.mp4", "length": 2492284}, {"path": "18 Understanding Validation/283 Module Introduction.mp4", "length": 2400081}, {"path": "30 Node.js as a Build Tool Using npm/456 Module Introduction.mp4", "length": 2372457}, {"path": "26 Understanding Async Await in Node.js/392 Module Introduction.mp4", "length": 2312956}, {"path": "20 File Upload Download/325 05-streaming-data-vs-preloading-data.zip", "length": 2143628}, {"path": "20 File Upload Download/331 05-streaming-data-vs-preloading-data.zip", "length": 2143628}, {"path": "20 File Upload Download/324 04-restricting-file-access.zip", "length": 2140666}, {"path": "20 File Upload Download/331 04-restricting-file-access.zip", "length": 2140666}, {"path": "20 File Upload Download/321 03-serving-images-statically.zip", "length": 2118098}, {"path": "20 File Upload Download/331 03-serving-images-statically.zip", "length": 2118098}, {"path": "20 File Upload Download/313 Module Introduction.mp4", "length": 2064447}, {"path": "07 The Model View Controller (MVC)/092 Module Introduction.mp4", "length": 2055957}, {"path": "22 Understanding Async Requests/341 Module Introduction.mp4", "length": 2049447}, {"path": "28 Working with GraphQL/412 Module Introduction.mp4", "length": 2011058}, {"path": "23 Adding Payments/348 Module Introduction.mp4", "length": 1981791}, {"path": "14 Sessions Cookies/225 Module Introduction.mp4", "length": 1914531}, {"path": "16 Sending Emails/265 Module Introduction.mp4", "length": 1819279}, {"path": "04 Improved Development Workflow and Debugging/040 Module Introduction.mp4", "length": 1758490}, {"path": "17 Advanced Authentication/271 Module Introduction.mp4", "length": 1742430}, {"path": "23 Adding Payments/350 01-added-checkout-page.zip", "length": 1727121}, {"path": "23 Adding Payments/352 01-added-checkout-page.zip", "length": 1727121}, {"path": "22 Understanding Async Requests/346 02-manipulating-the-dom.zip", "length": 1727056}, {"path": "22 Understanding Async Requests/347 02-manipulating-the-dom.zip", "length": 1727056}, {"path": "23 Adding Payments/351 02-using-stripe.zip", "length": 1726921}, {"path": "23 Adding Payments/352 02-using-stripe.zip", "length": 1726921}, {"path": "29 Deploying our App/443 shop-snapshot.zip", "length": 1726921}, {"path": "20 File Upload Download/328 07-deleting-files.zip", "length": 1604875}, {"path": "20 File Upload Download/331 07-deleting-files.zip", "length": 1604875}, {"path": "20 File Upload Download/318 02-filtering-files-by-mimetype.zip", "length": 1603556}, {"path": "20 File Upload Download/331 02-filtering-files-by-mimetype.zip", "length": 1603556}, {"path": "21 Adding Pagination/332 Module Introduction.mp4", "length": 1575480}, {"path": "19 Error Handling/300 Module Introduction.mp4", "length": 1483324}, {"path": "20 File Upload Download/316 01-handling-file-uploads-with-multer.zip", "length": 1089968}, {"path": "20 File Upload Download/331 01-handling-file-uploads-with-multer.zip", "length": 1089968}, {"path": "27 Understanding Websockets Socket.io/402 01-frontend-establishing-a-connection-from-the-client.zip", "length": 94863}, {"path": "27 Understanding Websockets Socket.io/411 01-frontend-establishing-a-connection-from-the-client.zip", "length": 94863}, {"path": "27 Understanding Websockets Socket.io/407 03-frontend-updating-posts-on-all-connected-clients.zip", "length": 94125}, {"path": "27 Understanding Websockets Socket.io/411 03-frontend-updating-posts-on-all-connected-clients.zip", "length": 94125}, {"path": "25 Working with REST APIs - The Practical Application/386 10-frontend-adding-auth-middleware-to-all-routes.zip", "length": 92743}, {"path": "25 Working with REST APIs - The Practical Application/391 10-frontend-adding-auth-middleware-to-all-routes.zip", "length": 92743}, {"path": "28 Working with GraphQL/424 06-frontend-sending-the-create-post-query.zip", "length": 90340}, {"path": "28 Working with GraphQL/439 06-frontend-sending-the-create-post-query.zip", "length": 90340}, {"path": "27 Understanding Websockets Socket.io/409 04-frontend-deleting-posts-across-clients.zip", "length": 90259}, {"path": "27 Understanding Websockets Socket.io/411 04-frontend-deleting-posts-across-clients.zip", "length": 90259}, {"path": "28 Working with GraphQL/415 04-frontend-deleting-posts-across-clients.zip", "length": 90259}, {"path": "27 Understanding Websockets Socket.io/405 02-frontend-synchronizing-post-additions.zip", "length": 89836}, {"path": "27 Understanding Websockets Socket.io/411 02-frontend-synchronizing-post-additions.zip", "length": 89836}, {"path": "28 Working with GraphQL/421 04-frontend-adding-login-functionality.zip", "length": 89194}, {"path": "28 Working with GraphQL/439 04-frontend-adding-login-functionality.zip", "length": 89194}, {"path": "25 Working with REST APIs - The Practical Application/384 09-frontend-logging-in-and-creating-jwt.zip", "length": 89160}, {"path": "25 Working with REST APIs - The Practical Application/391 09-frontend-logging-in-and-creating-jwt.zip", "length": 89160}, {"path": "28 Working with GraphQL/437 11-frontend-fixing-a-pagination-bug.zip", "length": 88594}, {"path": "28 Working with GraphQL/439 11-frontend-fixing-a-pagination-bug.zip", "length": 88594}, {"path": "28 Working with GraphQL/419 03-frontend-connecting-the-frontend.zip", "length": 87890}, {"path": "28 Working with GraphQL/439 03-frontend-connecting-the-frontend.zip", "length": 87890}, {"path": "28 Working with GraphQL/431 09-frontend-viewing-a-single-post.zip", "length": 87514}, {"path": "28 Working with GraphQL/439 09-frontend-viewing-a-single-post.zip", "length": 87514}, {"path": "25 Working with REST APIs - The Practical Application/371 02-frontend-setting-up-a-post-model.zip", "length": 87394}, {"path": "25 Working with REST APIs - The Practical Application/391 02-frontend-setting-up-a-post-model.zip", "length": 87394}, {"path": "25 Working with REST APIs - The Practical Application/374 05-frontend-fetching-a-single-post.zip", "length": 87015}, {"path": "25 Working with REST APIs - The Practical Application/391 05-frontend-fetching-a-single-post.zip", "length": 87015}, {"path": "25 Working with REST APIs - The Practical Application/368 01-frontend-fetching-list-of-posts.zip", "length": 86894}, {"path": "25 Working with REST APIs - The Practical Application/391 01-frontend-fetching-list-of-posts.zip", "length": 86894}, {"path": "28 Working with GraphQL/428 07-frontend-adding-pagination.zip", "length": 85837}, {"path": "28 Working with GraphQL/439 07-frontend-adding-pagination.zip", "length": 85837}, {"path": "28 Working with GraphQL/429 08-frontend-uploading-images.zip", "length": 85517}, {"path": "28 Working with GraphQL/439 08-frontend-uploading-images.zip", "length": 85517}, {"path": "25 Working with REST APIs - The Practical Application/378 08-frontend-adding-pagination.zip", "length": 85091}, {"path": "25 Working with REST APIs - The Practical Application/391 08-frontend-adding-pagination.zip", "length": 85091}, {"path": "25 Working with REST APIs - The Practical Application/391 assignment-frontend-solution.zip", "length": 85027}, {"path": "26 Understanding Async Await in Node.js/397 assignment-frontend-solution.zip", "length": 85024}, {"path": "28 Working with GraphQL/433 10-frontend-deleting-posts.zip", "length": 84879}, {"path": "28 Working with GraphQL/439 10-frontend-deleting-posts.zip", "length": 84879}, {"path": "25 Working with REST APIs - The Practical Application/375 06-frontend-uploading-images.zip", "length": 84664}, {"path": "25 Working with REST APIs - The Practical Application/391 06-frontend-uploading-images.zip", "length": 84664}, {"path": "25 Working with REST APIs - The Practical Application/376 07-frontend-updating-a-post.zip", "length": 84317}, {"path": "25 Working with REST APIs - The Practical Application/391 07-frontend-updating-a-post.zip", "length": 84317}, {"path": "25 Working with REST APIs - The Practical Application/366 00-frontend-starting-setup.zip", "length": 83757}, {"path": "25 Working with REST APIs - The Practical Application/391 00-frontend-starting-setup.zip", "length": 83757}, {"path": "29 Deploying our App/452 04-a-deployment-example-with-heroku.zip", "length": 62914}, {"path": "29 Deploying our App/455 04-a-deployment-example-with-heroku.zip", "length": 62914}, {"path": "19 Error Handling/306 03-using-the-express-error-handling-middleware.zip", "length": 61226}, {"path": "19 Error Handling/312 03-using-the-express-error-handling-middleware.zip", "length": 61226}, {"path": "29 Deploying our App/443 01-using-environment-variables.zip", "length": 60699}, {"path": "29 Deploying our App/455 01-using-environment-variables.zip", "length": 60699}, {"path": "29 Deploying our App/447 02-setting-up-request-logging.zip", "length": 60577}, {"path": "29 Deploying our App/455 02-setting-up-request-logging.zip", "length": 60577}, {"path": "29 Deploying our App/449 03-setting-up-a-ssl-server.zip", "length": 59899}, {"path": "29 Deploying our App/455 03-setting-up-a-ssl-server.zip", "length": 59899}, {"path": "18 Understanding Validation/287 02-using-validation-error-messages.zip", "length": 55839}, {"path": "18 Understanding Validation/299 02-using-validation-error-messages.zip", "length": 55839}, {"path": "18 Understanding Validation/297 09-validating-product-editing.zip", "length": 55749}, {"path": "18 Understanding Validation/299 09-validating-product-editing.zip", "length": 55749}, {"path": "17 Advanced Authentication/275 03-creating-the-reset-password-form.zip", "length": 55704}, {"path": "17 Advanced Authentication/282 03-creating-the-reset-password-form.zip", "length": 55704}, {"path": "18 Understanding Validation/288 03-built-in-and-custom-validators.zip", "length": 55671}, {"path": "18 Understanding Validation/299 03-built-in-and-custom-validators.zip", "length": 55671}, {"path": "17 Advanced Authentication/276 04-adding-logic-to-update-password.zip", "length": 55578}, {"path": "17 Advanced Authentication/282 04-adding-logic-to-update-password.zip", "length": 55578}, {"path": "19 Error Handling/305 02-returning-error-pages.zip", "length": 55467}, {"path": "19 Error Handling/312 02-returning-error-pages.zip", "length": 55467}, {"path": "18 Understanding Validation/294 07-adding-validation-to-login.zip", "length": 55206}, {"path": "18 Understanding Validation/299 07-adding-validation-to-login.zip", "length": 55206}, {"path": "18 Understanding Validation/290 04-checking-for-field-equality.zip", "length": 55058}, {"path": "18 Understanding Validation/299 04-checking-for-field-equality.zip", "length": 55058}, {"path": "18 Understanding Validation/286 01-setup-and-basic-validation.zip", "length": 54522}, {"path": "18 Understanding Validation/299 01-setup-and-basic-validation.zip", "length": 54522}, {"path": "18 Understanding Validation/291 05-added-async-validation.zip", "length": 53814}, {"path": "18 Understanding Validation/299 05-added-async-validation.zip", "length": 53814}, {"path": "19 Error Handling/309 04-status-codes.zip", "length": 53341}, {"path": "19 Error Handling/312 04-status-codes.zip", "length": 53341}, {"path": "18 Understanding Validation/292 06-keeping-user-input.zip", "length": 52938}, {"path": "18 Understanding Validation/299 06-keeping-user-input.zip", "length": 52938}, {"path": "16 Sending Emails/270 01-using-nodemailer-to-send-emails.zip", "length": 52834}, {"path": "15 Adding Authentication/262 11-adding-additional-flash-messages.zip", "length": 52791}, {"path": "15 Adding Authentication/264 11-adding-additional-flash-messages.zip", "length": 52791}, {"path": "15 Adding Authentication/254 05-using-middleware-to-protect-routes.zip", "length": 52774}, {"path": "15 Adding Authentication/264 05-using-middleware-to-protect-routes.zip", "length": 52774}, {"path": "18 Understanding Validation/295 08-sanitizing-data.zip", "length": 52425}, {"path": "18 Understanding Validation/299 08-sanitizing-data.zip", "length": 52425}, {"path": "18 Understanding Validation/299 assignment-solution.zip", "length": 52359}, {"path": "17 Advanced Authentication/280 05-why-editing-fails.zip", "length": 52091}, {"path": "17 Advanced Authentication/282 05-why-editing-fails.zip", "length": 52091}, {"path": "15 Adding Authentication/261 10-finishing-the-flash-messages.zip", "length": 51715}, {"path": "15 Adding Authentication/264 10-finishing-the-flash-messages.zip", "length": 51715}, {"path": "15 Adding Authentication/249 01-implementing-an-authentication-flow.zip", "length": 51173}, {"path": "15 Adding Authentication/264 01-implementing-an-authentication-flow.zip", "length": 51173}, {"path": "17 Advanced Authentication/274 02-creating-the-token.zip", "length": 50992}, {"path": "17 Advanced Authentication/282 02-creating-the-token.zip", "length": 50992}, {"path": "17 Advanced Authentication/272 01-resetting-password.zip", "length": 50678}, {"path": "17 Advanced Authentication/282 01-resetting-password.zip", "length": 50678}, {"path": "15 Adding Authentication/259 08-providing-user-feedback.zip", "length": 50357}, {"path": "15 Adding Authentication/264 08-providing-user-feedback.zip", "length": 50357}, {"path": "15 Adding Authentication/252 04-adding-the-signin-functionality.zip", "length": 50337}, {"path": "15 Adding Authentication/264 04-adding-the-signin-functionality.zip", "length": 50337}, {"path": "15 Adding Authentication/258 07-fixing-the-order-button.zip", "length": 50319}, {"path": "15 Adding Authentication/264 07-fixing-the-order-button.zip", "length": 50319}, {"path": "15 Adding Authentication/260 09-styling-error-messages.zip", "length": 50196}, {"path": "15 Adding Authentication/264 09-styling-error-messages.zip", "length": 50196}, {"path": "15 Adding Authentication/257 06-adding-csrf-protection.zip", "length": 50080}, {"path": "15 Adding Authentication/264 06-adding-csrf-protection.zip", "length": 50080}, {"path": "14 Sessions Cookies/229 02-adding-the-request-driven-solution.zip", "length": 49282}, {"path": "14 Sessions Cookies/244 02-adding-the-request-driven-solution.zip", "length": 49282}, {"path": "15 Adding Authentication/251 03-adding-a-tiny-improvement.zip", "length": 48884}, {"path": "15 Adding Authentication/264 03-adding-a-tiny-improvement.zip", "length": 48884}, {"path": "14 Sessions Cookies/235 04-using-the-session-middleware.zip", "length": 48002}, {"path": "14 Sessions Cookies/244 04-using-the-session-middleware.zip", "length": 48002}, {"path": "14 Sessions Cookies/236 05-using-mongodb-session-store.zip", "length": 47869}, {"path": "14 Sessions Cookies/244 05-using-mongodb-session-store.zip", "length": 47869}, {"path": "15 Adding Authentication/250 02-encrypting-passwords.zip", "length": 47672}, {"path": "15 Adding Authentication/264 02-encrypting-passwords.zip", "length": 47672}, {"path": "12 Working with NoSQL Using MongoDB/188 06-fixing-the-add-product-functionality.zip", "length": 47605}, {"path": "12 Working with NoSQL Using MongoDB/202 06-fixing-the-add-product-functionality.zip", "length": 47605}, {"path": "12 Working with NoSQL Using MongoDB/185 04-finishing-the-update-product-code.zip", "length": 46969}, {"path": "12 Working with NoSQL Using MongoDB/202 04-finishing-the-update-product-code.zip", "length": 46969}, {"path": "14 Sessions Cookies/239 07-fixing-some-minor-bugs.zip", "length": 46896}, {"path": "14 Sessions Cookies/244 07-fixing-some-minor-bugs.zip", "length": 46896}, {"path": "12 Working with NoSQL Using MongoDB/190 07-storing-the-user-in-the-database.zip", "length": 46858}, {"path": "12 Working with NoSQL Using MongoDB/202 07-storing-the-user-in-the-database.zip", "length": 46858}, {"path": "14 Sessions Cookies/244 08-two-tiny-improvements.zip", "length": 46771}, {"path": "14 Sessions Cookies/228 01-creating-the-login-form.zip", "length": 46574}, {"path": "14 Sessions Cookies/244 01-creating-the-login-form.zip", "length": 46574}, {"path": "15 Adding Authentication/248 00-starting-setup.zip", "length": 46158}, {"path": "15 Adding Authentication/264 00-starting-setup.zip", "length": 46158}, {"path": "12 Working with NoSQL Using MongoDB/192 08-added-the-add-to-cart-functionality.zip", "length": 46149}, {"path": "12 Working with NoSQL Using MongoDB/202 08-added-the-add-to-cart-functionality.zip", "length": 46149}, {"path": "14 Sessions Cookies/232 03-configuring-cookies.zip", "length": 45863}, {"path": "14 Sessions Cookies/244 03-configuring-cookies.zip", "length": 45863}, {"path": "12 Working with NoSQL Using MongoDB/178 01-using-the-database-connection.zip", "length": 45756}, {"path": "12 Working with NoSQL Using MongoDB/202 01-using-the-database-connection.zip", "length": 45756}, {"path": "14 Sessions Cookies/238 06-deleting-a-cookie.zip", "length": 45609}, {"path": "14 Sessions Cookies/244 06-deleting-a-cookie.zip", "length": 45609}, {"path": "11 Understanding Sequelize/168 13-resetting-the-cart-and-fetching.zip", "length": 45414}, {"path": "11 Understanding Sequelize/170 13-resetting-the-cart-and-fetching.zip", "length": 45414}, {"path": "14 Sessions Cookies/241 08-two-tiny-improvements.zip", "length": 45311}, {"path": "14 Sessions Cookies/244 assignment-solution.zip", "length": 45281}, {"path": "11 Understanding Sequelize/167 12-storing-cartitems-as-orderitems.zip", "length": 45134}, {"path": "11 Understanding Sequelize/170 12-storing-cartitems-as-orderitems.zip", "length": 45134}, {"path": "11 Understanding Sequelize/164 10-adding-existing-products-and-retrieving.zip", "length": 44853}, {"path": "11 Understanding Sequelize/170 10-adding-existing-products-and-retrieving.zip", "length": 44853}, {"path": "12 Working with NoSQL Using MongoDB/198 11-adding-relational-order-data.zip", "length": 44603}, {"path": "12 Working with NoSQL Using MongoDB/202 11-adding-relational-order-data.zip", "length": 44603}, {"path": "12 Working with NoSQL Using MongoDB/200 12-removing-deleted-items-from-the-cart.zip", "length": 44582}, {"path": "12 Working with NoSQL Using MongoDB/202 12-removing-deleted-items-from-the-cart.zip", "length": 44582}, {"path": "12 Working with NoSQL Using MongoDB/182 03-fetch-a-single-product.zip", "length": 44408}, {"path": "12 Working with NoSQL Using MongoDB/202 03-fetch-a-single-product.zip", "length": 44408}, {"path": "12 Working with NoSQL Using MongoDB/181 02-fetching-all-products.zip", "length": 44109}, {"path": "12 Working with NoSQL Using MongoDB/202 02-fetching-all-products.zip", "length": 44109}, {"path": "12 Working with NoSQL Using MongoDB/194 09-displaying-the-cart-items.zip", "length": 44040}, {"path": "12 Working with NoSQL Using MongoDB/202 09-displaying-the-cart-items.zip", "length": 44040}, {"path": "13 Working with Mongoose/222 09-getting-and-displaying-orders.zip", "length": 43780}, {"path": "13 Working with Mongoose/224 09-getting-and-displaying-orders.zip", "length": 43780}, {"path": "12 Working with NoSQL Using MongoDB/187 05-deleting-products.zip", "length": 43307}, {"path": "12 Working with NoSQL Using MongoDB/202 05-deleting-products.zip", "length": 43307}, {"path": "11 Understanding Sequelize/157 06-adding-a-one-to-many-relationship.zip", "length": 43085}, {"path": "11 Understanding Sequelize/170 06-adding-a-one-to-many-relationship.zip", "length": 43085}, {"path": "06 Working with Dynamic Content Adding Templating Engines/089 05-working-on-layout-with-partials.zip", "length": 42898}, {"path": "06 Working with Dynamic Content Adding Templating Engines/091 05-working-on-layout-with-partials.zip", "length": 42898}, {"path": "13 Working with Mongoose/206 01-connecting-to-the-mongodb-server.zip", "length": 42890}, {"path": "13 Working with Mongoose/224 01-connecting-to-the-mongodb-server.zip", "length": 42890}, {"path": "14 Sessions Cookies/243 09-adjusted-code.zip", "length": 42887}, {"path": "11 Understanding Sequelize/150 02-inserting-data-and-creating-a-product.zip", "length": 42838}, {"path": "11 Understanding Sequelize/170 02-inserting-data-and-creating-a-product.zip", "length": 42838}, {"path": "11 Understanding Sequelize/162 09-creating-and-fetching-a-cart.zip", "length": 42652}, {"path": "11 Understanding Sequelize/170 09-creating-and-fetching-a-cart.zip", "length": 42652}, {"path": "12 Working with NoSQL Using MongoDB/196 10-deleting-cart-items.zip", "length": 42643}, {"path": "12 Working with NoSQL Using MongoDB/202 10-deleting-cart-items.zip", "length": 42643}, {"path": "09 Dynamic Routes Advanced Models/121 05-pre-populating-the-edit-product-page.zip", "length": 42634}, {"path": "09 Dynamic Routes Advanced Models/130 05-pre-populating-the-edit-product-page.zip", "length": 42634}, {"path": "12 Working with NoSQL Using MongoDB/171 00-starting-setup.zip", "length": 42539}, {"path": "12 Working with NoSQL Using MongoDB/202 00-starting-setup.zip", "length": 42539}, {"path": "13 Working with Mongoose/216 07-working-on-the-shopping-cart.zip", "length": 42501}, {"path": "13 Working with Mongoose/224 07-working-on-the-shopping-cart.zip", "length": 42501}, {"path": "13 Working with Mongoose/213 05-adding-and-using-a-user-model.zip", "length": 42486}, {"path": "13 Working with Mongoose/224 05-adding-and-using-a-user-model.zip", "length": 42486}, {"path": "13 Working with Mongoose/208 02-saving-data-through-mongoose.zip", "length": 42175}, {"path": "13 Working with Mongoose/224 02-saving-data-through-mongoose.zip", "length": 42175}, {"path": "11 Understanding Sequelize/158 07-creating-and-managing-a-user.zip", "length": 42171}, {"path": "11 Understanding Sequelize/170 07-creating-and-managing-a-user.zip", "length": 42171}, {"path": "13 Working with Mongoose/214 06-using-relations-in-mongoose.zip", "length": 42130}, {"path": "13 Working with Mongoose/224 06-using-relations-in-mongoose.zip", "length": 42130}, {"path": "10 SQL Introduction/140 02-fetching-products-time-to-practice.zip", "length": 42104}, {"path": "10 SQL Introduction/144 02-fetching-products-time-to-practice.zip", "length": 42104}, {"path": "11 Understanding Sequelize/160 08-fetching-related-products.zip", "length": 41591}, {"path": "11 Understanding Sequelize/170 08-fetching-related-products.zip", "length": 41591}, {"path": "11 Understanding Sequelize/165 11-deleting-related-items.zip", "length": 41463}, {"path": "11 Understanding Sequelize/170 11-deleting-related-items.zip", "length": 41463}, {"path": "09 Dynamic Routes Advanced Models/124 07-adding-the-product-delete-functionality.zip", "length": 40955}, {"path": "09 Dynamic Routes Advanced Models/130 07-adding-the-product-delete-functionality.zip", "length": 40955}, {"path": "13 Working with Mongoose/209 03-fetching-all-products.zip", "length": 40735}, {"path": "13 Working with Mongoose/224 03-fetching-all-products.zip", "length": 40735}, {"path": "14 Sessions Cookies/227 00-starting-setup.zip", "length": 40691}, {"path": "14 Sessions Cookies/244 00-starting-setup.zip", "length": 40691}, {"path": "09 Dynamic Routes Advanced Models/123 06-editing-the-product-data.zip", "length": 40489}, {"path": "09 Dynamic Routes Advanced Models/130 06-editing-the-product-data.zip", "length": 40489}, {"path": "10 SQL Introduction/142 04-fetching-a-single-product.zip", "length": 40362}, {"path": "10 SQL Introduction/144 04-fetching-a-single-product.zip", "length": 40362}, {"path": "11 Understanding Sequelize/152 03-getting-a-single-product.zip", "length": 40223}, {"path": "11 Understanding Sequelize/170 03-getting-a-single-product.zip", "length": 40223}, {"path": "13 Working with Mongoose/217 08-loading-the-cart.zip", "length": 40065}, {"path": "13 Working with Mongoose/224 08-loading-the-cart.zip", "length": 40065}, {"path": "13 Working with Mongoose/212 04-deleting-products.zip", "length": 39845}, {"path": "13 Working with Mongoose/224 04-deleting-products.zip", "length": 39845}, {"path": "09 Dynamic Routes Advanced Models/117 03-rendering-the-product-detail-view.zip", "length": 39805}, {"path": "09 Dynamic Routes Advanced Models/130 03-rendering-the-product-detail-view.zip", "length": 39805}, {"path": "09 Dynamic Routes Advanced Models/119 04-adding-a-cart-model.zip", "length": 39732}, {"path": "09 Dynamic Routes Advanced Models/130 04-adding-a-cart-model.zip", "length": 39732}, {"path": "10 SQL Introduction/136 01-connecting-our-app.zip", "length": 39169}, {"path": "10 SQL Introduction/144 01-connecting-our-app.zip", "length": 39169}, {"path": "09 Dynamic Routes Advanced Models/128 09-fixing-a-delete-product-bug.zip", "length": 39097}, {"path": "09 Dynamic Routes Advanced Models/130 09-fixing-a-delete-product-bug.zip", "length": 39097}, {"path": "11 Understanding Sequelize/155 05-deleting-products.zip", "length": 38828}, {"path": "11 Understanding Sequelize/170
Download Info
-
Tips
“NodeJS - The Complete Guide” Its related downloads are collected from the DHT sharing network, the site will be 24 hours of real-time updates, to ensure that you get the latest resources.This site is not responsible for the authenticity of the resources, please pay attention to screening.If found bad resources, please send a report below the right, we will be the first time shielding.
-
DMCA Notice and Takedown Procedure
If this resource infringes your copyright, please email([email protected]) us or leave your message here ! we will block the download link as soon as possiable.