Query Strings & Route Order
"?" ke baad ka hissa query string hai aur Express use parse karke req.query object bana deta hai. Ye filtering, sorting aur pagination ke liye use hota hai — query params OPTIONAL hote hain, route params compulsory.
Express routes ko REGISTRATION ORDER mein match karta hai, PEHLA MATCH jeet jaata hai. Isliye specific routes ("/users/me") ko dynamic routes ("/users/:id") se PEHLE likhna zaroori hai, warna "me" ko id samajh liya jaayega.
// GET /products?sort=price&page=2
app.get("/products", (req, res) => {
const { sort = "name", page = 1 } = req.query;
res.json({ sort, page });
});
app.get("/users/me", currentUser); // PEHLE — warna kabhi nahi chalega
app.get("/users/:id", getUser); // BAAD mein- req.query = "?" ke baad ke optional key-value pairs, filtering/pagination ke liye
- Express pehla matching route chalata hai, order matter karta hai
- Static/specific routes hamesha dynamic (:param) routes se pehle likho
Query values HAMESHA string ya string array hoti hain. "?tag=a&tag=b" par req.query.tag ek ARRAY ban jaata hai — agar code single string maan raha hai to crash ho sakta hai. Isliye query params ko bhi validate/normalize karna chahiye.
// GET /search?q=node&tag=web&tag=api&page=2
const { q = "", page = "1" } = req.query;
const tags = [].concat(req.query.tag || []); // hamesha array
const pageNum = Math.max(1, parseInt(page, 10) || 1);Express PEHLE MATCH par ruk jaata hai. Isliye specific paths ("/users/me", "/users/export") ko parameterized paths ("/users/:id") se UPAR rakho. Isi tarah catch-all ("*") aur 404 handler hamesha SABSE NEECHE hone chahiye.