Node.js Lesson 8: Routing with Express Router
As apps grow, putting all routes in one file becomes chaos. Express Router lets you split routes into separate files by feature.
Without Router (bad — becomes messy)
// app.js — everything in one file
app.get("/api/users", ...);
app.post("/api/users", ...);
app.get("/api/users/:id", ...);
app.put("/api/users/:id", ...);
app.delete("/api/users/:id", ...);
app.get("/api/products", ...);
app.post("/api/products", ...);
// ... 50 more routes
With Express Router (clean)
// routes/users.js
const express = require("express");
const router = express.Router();
let users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
];
router.get("/", (req, res) => {
res.json(users);
});
router.get("/:id", (req, res) => {
const user = users.find(u => u.id === Number(req.params.id));
if (!user) return res.status(404).json({ error: "User not found" });
res.json(user);
});
router.post("/", (req, res) => {
const newUser = { id: Date.now(), ...req.body };
users.push(newUser);
res.status(201).json(newUser);
});
router.delete("/:id", (req, res) => {
users = users.filter(u => u.id !== Number(req.params.id));
res.json({ message: "Deleted" });
});
module.exports = router;
// app.js — clean!
const usersRouter = require("./routes/users");
app.use("/api/users", usersRouter);
🏋️ Practice Task
Structure your Express app into separate route files: routes/users.js and routes/products.js. Both should support GET all, GET one by id, POST create, DELETE by id. Use express.Router() for each. Import both in app.js.
💡 Hint: In app.js: const usersRouter = require(“./routes/users”); app.use(“/api/users”, usersRouter);