Course Overview:
This workshop teaches the participants how to design and develop server side applications using the event-driven, non-blocking model framework Node.js. This program inducts the participant in some of the advanced concepts of the JavaScript language so that the participant is well equipped to build end-to-end application using JavaScript.
Course Objectives:
- Understand the non-blocking nature of Node.js
- Writing asynchronous code with callbacks and streams
- Learn how to modularize code using NPM and require()
- Understand and take advantage of the built-in apis for building scalable few applications
- Learn how to build web applications using Express.js
- Understand how to handle authentication and authorization
- Learn how to build real-time applications using WebSockets and socket.io
Pre-requisites:
- Experience in application development in any programming language
- Intermediate to advanced knowledge of the JavaScript language
- Exposure to any server technology (J2EE, .NET, Ruby etc)
Target Audience:
- Web developer who wants to build data intensive scalable applications using Node.js
Course Duration:
- 21 hours – 3 days
Course Content:
Day 1
New in ES6
- Classes
- let and const
- Arrow functions
- Enhanced Object Literals
- Destructuring
- Spread Operator
- Generators and Iterators
- Symbols
- Comprehensions
- Async Programming using Promises
- Async Programming using Async Await
Introduction to Node.js
- Installing Node.js
- Node’s Event Loop
- Alternatives to Node.js
- Writing asynchronous code
Unit Testing
- Writing Tests Using Mocha.js
- Assertion helpers in Chai.js
- Mocks using sinon.js
- Setting up a test harness for Node applications
Modularizing code
- Understanding built-in modules
- Techniques for modularizing JavaScirpt code
- Using require() to modularize application code
- Using npm for third-party modules
- Handling Exceptions
Events and Streams
- Understanding Events
- EventEmitter class
- Understanding Streams
- Reading and writing streams
- Using pipe()
Day 2
Accessing Local Resources
- Process Object
- Manipulating File System
- Understanding Buffers
Node.js and the web
- Handling web requests
- Building a web server
- Understanding the need for web sockets
- Realtime interaction using socket.io
Building web applications using Fastify.js / Express.js
- Installing Fastify.js / Express.js
- Routing
- Parameters and queries in routing
- Serving Data
- Routing
- Using plugins (middlewares)
- Working with cookies and sessions
- Authentication and authorization
- Error Handling
- Persisting data in the database
Messaging Using RabbitMQ
- Introduction
- Queing Architecture
- Installation & Configuration
- RabbitMQ Exchanges
- Routing
- Publisher & Subscriber of Messages
- Sending & Receiving Messages
Day 3
Deploying Node applications
- Setting ‘ENVIRONMENT’
- Setting appropriate environment variables
- Handling appropriate logging levels
- Ensure application auto restarting
- Using a Process Manager
- Using PM2
- Using a Cache Server
Building Microservices
- Building Microservices
- Hosting Microservies in containers (Docker)
- Microservices Tenants
Scaling Node applications
- The Child process model
- exec, spawn, and fork functions
- Using the Cluster module
- Node Packages
- Packages of interest
- Deciding Factors
Debugging Node Applications
- Node Inspector
- Using –-inspect switch in node
- Using ‘debug’ module Using the ‘debugger’ expression
- Summary and Closing Remarks