You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在控制器中全局使用变量?实现所有视图共享user变量

在所有视图中全局共享user变量的解决方案

直接用Express的全局中间件就能解决重复传参的问题,不用在每个控制器方法里手动添加user变量。

步骤1:注册全局中间件

在所有路由定义之前,添加一个中间件,把req.session.user挂载到res.locals上——Express会自动把res.locals里的属性传递给所有渲染的视图:

app.use((req, res, next) => {
  // 把session中的user赋值给全局视图变量,未登录时设为null
  res.locals.user = req.session.user || null;
  next(); // 继续执行后续路由逻辑
});

步骤2:简化控制器方法

现在所有视图都能直接访问user变量了,原来的profile方法可以简化成这样:

profile: (req, res) => {
  if (req.session.user) {
    res.render("profile"); // 无需再手动传递user参数
  } else {
    res.render("login");
  }
}

注意事项

  • 中间件必须放在所有路由注册之前,否则路由执行时变量还未挂载,视图无法获取到值
  • 不管你用EJS、Pug还是其他模板引擎,res.locals的机制都是通用的,视图里直接用对应语法调用user即可(比如EJS用<%= user %>,Pug用#{user})
  • 如果需要对未登录状态做统一处理,可在中间件里扩展逻辑,比如判断req.session.user不存在时直接跳转登录页(根据业务需求调整)

内容的提问来源于stack exchange,提问作者Manuel Alejandro Garca Andrade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:40:02