NelsonLabs
Express.js/Routing

Routing

Routing maps HTTP method + URL patterns to handler functions. Express has a flexible routing system that supports parameters, optional segments, query strings, and route grouping with Router.

Basic routing โ€” all HTTP methods
javascript
app.get("/courses",         getAllCourses);   // GET /courses
app.post("/courses",        createCourse);   // POST /courses
app.put("/courses/:id",     updateCourse);   // PUT /courses/42
app.patch("/courses/:id",   patchCourse);    // PATCH /courses/42
app.delete("/courses/:id",  deleteCourse);   // DELETE /courses/42

// Route parameters โ€” dynamic segments prefixed with :
app.get("/courses/:id", (req, res) => {
  const { id } = req.params;      // id from the URL
  const course = getCourse(id);
  if (!course) return res.status(404).json({ error: "Not found" });
  res.json(course);
});

// Multiple parameters
app.get("/courses/:courseId/chapters/:chapterId", (req, res) => {
  const { courseId, chapterId } = req.params;
  res.json({ courseId, chapterId });
});

// Query string โ€” /courses?category=frontend&limit=10
app.get("/courses", (req, res) => {
  const { category, limit = 20, page = 1 } = req.query;
  const courses = getCourses({ category, limit: Number(limit), page: Number(page) });
  res.json(courses);
});
Express Router โ€” grouping routes
javascript
// routes/courses.js
const router = require("express").Router();

router.get("/",     getAllCourses);
router.get("/:id",  getCourse);
router.post("/",    createCourse);
router.put("/:id",  updateCourse);
router.delete("/:id", deleteCourse);

module.exports = router;

// index.js โ€” mount the router
const coursesRouter = require("./routes/courses");
app.use("/api/courses", coursesRouter);
// Now: GET /api/courses โ†’ getAllCourses
//      GET /api/courses/42 โ†’ getCourse