How routers and controllers work together — Intermediate
Supplementary examples
Mount router on app (app.js)
const usersRouter = require("./users/users.router");
const pastesRouter = require("./pastes/pastes.router");
app.use("/users", usersRouter);
app.use("/users/:userId/pastes", pastesRouter);Controller exports named handlers
// pastes.controller.js
module.exports = {
list,
create,
read,
update,
remove,
};Router chains validation then controller
const validateCreate = require("./pastes.validators");
router.post("/", validateCreate, controller.create);methodNotAllowed for unsupported verbs
router
.route("/:pasteId")
.get(controller.read)
.put(controller.update)
.delete(controller.remove)
.all(methodNotAllowed);Course example
// pastes.router.js — wiring only (no business logic here)
const router = require("express").Router({ mergeParams: true });
const controller = require("./pastes.controller");
const methodNotAllowed = require("../errors/methodNotAllowed");
router
.route("/")
.get(controller.list)
.post(controller.create)
.all(methodNotAllowed);
router
.route("/:pasteId")
.get(controller.read)
.put(controller.update)
.delete(controller.remove)
.all(methodNotAllowed);
module.exports = router;
Additional references & examples
- Thinkful — Organizing Express (pastes example)
Router/controller structure demonstration project.
- Express Router API
Router methods, route parameters, and mounting paths.
- Express.js guide
Routing, middleware order, and request/response lifecycle.
- Thinkful — Node, Express, Postgres starter
Starter repo used across Knex and Express lessons.