next() and Middleware Order
next() ka matlab hai "mera kaam ho gaya, agle ko chalao". next() ko ERROR ke saath call karna — next(err) — normal chain SKIP karke seedha error-handling middleware par jaata hai.
Middleware STRICTLY REGISTRATION ORDER mein chalte hain. Isi wajah se app.use(express.json()) routes se PEHLE likhna padta hai — warna route ke chalte waqt req.body abhi tak parse hi nahi hua hoga aur undefined milega.
app.use(express.json()); // PEHLE — warna req.body undefined
app.post("/users", (req, res, next) => {
if (!req.body.name) return next(new Error("name required")); // error path
res.status(201).json(req.body);
});
// next("route") — is route ke baaki handlers skip, agla matching route- next() chain aage badhata hai, next(err) seedha error middleware par jaata hai
- Middleware registration order mein chalta hai — parser routes se pehle
- next() ke saath return lagao, warna code aage chalta rehta hai
next() agli layer chalata hai. next(err) NORMAL layers skip karke seedha error-handling middleware par jaata hai. next("route") current route ke baaki handlers skip karke agle MATCHING ROUTE par chala jaata hai — conditional routing ke liye useful hai.
app.get("/item/:id",
(req, res, next) => {
if (req.params.id === "0") return next("route"); // agla route
next();
},
(req, res) => res.send("normal item"));
app.get("/item/:id", (req, res) => res.send("special zero item"));Teen classic order bugs: (1) express.json() routes ke BAAD lagana — req.body undefined; (2) error handler routes se PEHLE lagana — errors kabhi nahi pakde jaate; (3) 404 catch-all routers se PEHLE lagana — sab kuch 404 ho jaata hai.