Raahaao Code: Node.js
Build the server side: HTTP, APIs, databases, real-time, security and deploying.
9+ hours of lessons · 2 projects · €35
Helps you prepare for: OpenJS Node.js Application Developer, JSNAD (Linux Foundation)
Or get it in a monthly plan from €3.46 a week (billed €15 monthly) →
You need an account to open any lessons. Without one you can browse the towers and prices.
What you'll learn, floor by floor
- 1
Foundations (Beginner)
- How the web works
- The command line
- Node.js basics and modules
- 2
Tooling (Beginner)
- Git and GitHub
- npm and dependencies
- Files, streams and JSON
- 3
Servers (Intermediate)
- A server from scratch
- Express routes and middleware
- Designing an API
- 4
Data and users (Intermediate)
- Databases from Node
- Passwords, sessions and tokens
- Real-time: polling, SSE and WebSockets
- 5
Pro (Job-ready)
- Web security
- Signing and trust
- Testing your API
- Deploying
The two rooftop projects
URL shortener API
Build the API behind a link shortener: send it a long web address and it hands back a short code, then anyone who visits the code is redirected to the original page. You will validate input, reject duplicate custom codes, count clicks and protect the service from a single caller flooding it.
- POST /links with a valid http(s) url returns 201 and a 6-character code.
- POST /links with an invalid url returns 400 with a JSON error.
- A custom code that is already taken returns 409.
- GET /:code redirects with 302 and a Location header.
- An unknown code returns 404 JSON.
- GET /links/:code/stats returns the click count.
- More than 5 POSTs per minute from the same ip returns 429.
Real-time chat server
Build the server side of a chat app: people log in, post messages into rooms, read the recent history and follow a live stream of new messages. You will keep login tokens safe by storing only a hash, refuse unauthenticated or oversized messages, neutralise HTML so nobody can inject a script into the page, and slow down anyone who floods a room.
- POST /login with a name returns a token, and only a hash of tokens is stored (expose tokenStoreHasPlainText() that returns false).
- POST /rooms/:id/messages without a valid token returns 401.
- Messages longer than 500 characters return 400.
- Messages are HTML-escaped in stored output.
- GET /rooms/:id/history returns the last 50 messages.
- GET /rooms/:id/stream returns content-type text/event-stream and a body formatted as data: <json>\n\n for recent messages.
- More than 10 messages in 10 seconds from one token returns 429.
Questions
Do I need to install anything?
No. Everything runs in your browser. For the projects you can also work on your own computer and upload your files.
Can I skip what I already know?
Yes. Once you own a tower, each floor has a skip test: score 8 out of 10 and that floor opens.
What is the refund policy?
Refunds within 5 days of purchase. After 5 days, no refunds or returns.
Do I keep access?
Yes. A tower you buy is yours, with no subscription.
The towers
HTML & CSS · JavaScript · Python · SQL · C++ · Python for Data · Flask · Logic & Problem Solving · Algorithms & Data Structures · Java · Machine Learning · Building with AI