404 Handler
Agar koi route match nahi hota to Express ka default handler EK plain HTML 404 bhej deta hai. API ke liye ye theek nahi — client JSON expect karta hai, use HTML milta hai.
Custom 404 ke liye SAARE routes ke BAAD ek catch-all middleware lagao. Ye error handler se PEHLE aur routes ke BAAD hona chahiye — order galat hua to ya sab kuch 404 ho jaayega ya 404 handler chalega hi nahi.
app.use("/api", apiRoutes);
app.use((req, res, next) => { // routes ke BAAD
res.status(404).json({ error: "Route not found", path: req.originalUrl });
});
app.use(errorHandler); // error handler sabse aakhir- Default Express 404 HTML deta hai — API ke liye custom JSON 404 banao
- Catch-all middleware saare routes ke BAAD, error handler se PEHLE
- app.use() form har method cover karta hai, app.get("*") sirf GET
404 middleware ko SAARE routes ke baad aur error handler se pehle lagana chahiye. Agar galti se pehle laga diya, to har request wahin ruk jaayegi aur asli routes kabhi nahi chalenge — ye ek bahut common beginner bug hai.
app.use("/api/users", usersRouter);
app.use("/api/orders", ordersRouter);
app.use((req, res) => res.status(404).json({
error: "Not Found", method: req.method, path: req.originalUrl,
}));
app.use(errorHandler);Ek hi app mein API aur web pages dono hon to 404 ka format request ke hisaab se badalna chahiye — API clients JSON expect karte hain, browsers HTML. req.accepts() se ye decide kiya ja sakta hai.
app.use((req, res) => {
res.status(404);
if (req.accepts("html")) return res.render("404", { url: req.originalUrl });
res.json({ error: "Not Found" });
});