🧾
Templating & Static Files

res.render & Locals

app.locals aur res.locals
💡 res.render() PRINTING press ko "ye template, ye data, chhaap do" bolna hai. app.locals notice board hai jo SAB pages par dikhta hai, res.locals us ek request ke liye chipkaayi gayi parchi hai.

res.render(view, data) template ko data ke saath render karke HTML response bhej deta hai. Render ASYNCHRONOUS hota hai — agar template mein error ho to Express automatically error middleware tak error pahuncha deta hai.

app.locals poore app ke liye shared variables rakhta hai (site name, version) aur res.locals SIRF CURRENT REQUEST ke liye (logged-in user, flash message). Dono har template mein bina explicitly pass kiye available hote hain.

app.locals.siteName = "Code10x";                  // sab requests

app.use((req, res, next) => {
  res.locals.currentUser = req.user;              // is request ke liye
  next();
});

app.get("/dash", (req, res) => res.render("dash", { stats }));
🧾
res.render() PRINTING press ko "ye template, ye data, chhaap do" bolna hai. app.locals notice board hai jo SAB pages par dikhta hai, res.locals us ek request ke liye chipkaayi gayi parchi hai.
1 / 2
⚡ Quick Recap
  • res.render(view, data) template + data se HTML banakar bhej deta hai
  • app.locals = app-wide variables, res.locals = per-request variables
  • Dono templates mein automatically available hote hain
Is page mein (2 subtopics)

Template ko teen jagah se data milta hai: app.locals (app-wide), res.locals (is request ke liye), aur res.render() ka data object. Conflict hone par render ka data sabse upar jeetta hai, phir res.locals, phir app.locals.

app.locals.siteName = "Code10x";
res.locals.user = req.user;
res.render("home", { title: "Dashboard" });
// template mein: siteName, user, title teeno available

res.render() asynchronous hai. Agar callback do to Express khud response nahi bhejta — tumhe HTML manually bhejna padega, lekin error handle karne ka mauka mil jaata hai. Bina callback ke error automatically error middleware par chala jaata hai.

res.render("report", data, (err, html) => {
  if (err) return next(err);
  res.send(html);
});