← JS Mastery | Module 9: Node.js Basics Express.js: Routing & Middleware
Module 9

Express.js: Routing & Middleware

⏱ 24 min read ● Intermediate 🆓 Free

Express Setup

// npm install express
const express = require("express");
const app = express();

// Middleware:
app.use(express.json());           // parse JSON bodies
app.use(express.static("public")); // serve static files

// Routes:
app.get("/", (req, res) => res.send("Hello!"));
app.get("/api/users", (req, res) => res.json({ users: [] }));
app.post("/api/users", (req, res) => {
  const user = req.body;
  res.status(201).json({ ...user, id: Date.now() });
});

app.listen(3000, () => console.log("Running on :3000"));

Routing & Middleware

// Route params and query strings:
app.get("/api/users/:id", (req, res) => {
  const { id } = req.params;    // from :id
  const { fields } = req.query; // from ?fields=name,email
  res.json({ id, fields });
});

// Custom middleware:
function logger(req, res, next) {
  console.log(req.method, req.path, new Date().toISOString());
  next();  // MUST call next() or request hangs!
}
app.use(logger);

// Auth middleware on specific routes:
function auth(req, res, next) {
  const token = req.headers.authorization?.split(" ")[1];
  if (!token) return res.status(401).json({ error: "Unauthorized" });
  req.user = verifyToken(token);
  next();
}
app.get("/api/profile", auth, (req, res) => res.json(req.user));

// Router — split routes into files:
const usersRouter = express.Router();
usersRouter.get("/", getUsers);
usersRouter.post("/", createUser);
app.use("/api/users", usersRouter);

// Error handler — 4 params:
app.use((err, req, res, next) => {
  res.status(500).json({ error: err.message });
});

⚡ Key Takeaways

🎯 Practice Exercises

EXERCISE 1

Build an Express API for books: GET /books, GET /books/:id, POST /books, PATCH /books/:id, DELETE /books/:id. Use an array as the data store. Add request logging middleware.

← File System