🗂️
Routing

express.Router()

Modular, Mountable Routes
💡 express.Router() EK MINI-APP hai — jaise bade office mein alag-alag DEPARTMENTS. HR ka apna floor, Finance ka apna. Main app sirf batata hai ki kaunsa department kis gate (path prefix) par hai.

Router EK ISOLATED middleware + route collection hai jise alag file mein rakhkar app.use("/prefix", router) se MOUNT kiya ja sakta hai. Isse ek hi bade app.js ke bajaye feature-wise files banti hain.

Router ke apne middleware bhi ho sakte hain jo sirf USI router ke routes par chalte hain — jaise "/admin" router par auth check. Mounting path automatically har child route ke aage lag jaata hai.

// routes/users.js
const router = require("express").Router();
router.use(requireAuth);              // sirf is router ke liye
router.get("/", listUsers);           // final path: /users
router.get("/:id", getUser);          // final path: /users/:id
module.exports = router;

// app.js
app.use("/users", require("./routes/users"));
🗂️
express.Router() EK MINI-APP hai — jaise bade office mein alag-alag DEPARTMENTS. HR ka apna floor, Finance ka apna. Main app sirf batata hai ki kaunsa department kis gate (path prefix) par hai.
1 / 2
⚡ झट से Recap
  • Router = mini-app jisme apne routes aur middleware hote hain
  • app.use("/prefix", router) se mount hota hai, prefix auto-prepend hota hai
  • Router-level middleware sirf usi router ke routes par chalta hai
इस page में (2 subtopics)

Bade app mein har feature ka apna router file hota hai — routes/users.js, routes/orders.js — aur app.js sirf unhe mount karta hai. Isse merge conflicts kam hote hain aur naya developer aasaani se samajh leta hai ki kaunsa code kahan hai.

// app.js
app.use("/api/users", require("./routes/users"));
app.use("/api/orders", require("./routes/orders"));
app.use("/admin", requireAdmin, require("./routes/admin"));

Default se child router ko parent ke route params NAHI milte. Nested routers mein (jaise /users/:userId/orders) Router({ mergeParams: true }) lagana padta hai, tabhi child ke andar req.params.userId available hota hai.

const orders = require("express").Router({ mergeParams: true });
orders.get("/", (req, res) => res.json({ userId: req.params.userId }));

app.use("/users/:userId/orders", orders);