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

res.locals是什么?请求作用域含义及视图可访问该属性的来源解析

问题1:「scoped to the request(限定为请求作用域)」的具体含义

res.locals的生命周期完全和单个HTTP请求绑定:

  • 每收到一个新的客户端请求,Express都会生成一个全新的空白res.locals对象,仅归属本次请求使用
  • 本次请求处理完成、响应返回给客户端后,对应的res.locals对象会被立即销毁,不会留存任何数据
  • 不同用户的请求、同一个用户发起的多个独立请求,各自的res.locals完全隔离,数据不会互相干扰。比如你在用户A的登录请求里给res.locals.user赋值为A的账号信息,用户B的请求完全访问不到这个值,同个用户第二次发起的首页请求也无法直接读取该值,必须重新赋值。

问题2:视图中可访问该对象的原因、属性来源

这是Express内置的模板渲染机制决定的:

  • 当你调用res.render(视图路径, 自定义参数)方法渲染EJS等模板时,Express内部会自动合并三类变量:全局应用级变量app.locals、本次请求的res.locals、你调用render方法时传入的自定义参数对象,三类变量重名时的优先级为:自定义参数 > res.locals > app.locals
  • 合并完成后的所有变量会被整体注入到模板的运行上下文中,EJS里的locals对象就是这个合并后变量集合的直接引用,所以你可以直接在模板里访问到res.locals里定义的所有属性。

你示例中的<%= locals.title %>就是按照上述优先级查找对应值输出的:先找render时传入的title参数,没找到就去res.locals中查找,仍未找到就去全局app.locals中查找。


内容的提问来源于stack exchange,提问作者Shivam Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:36:01