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

如何将res.render()的参数传递给多层嵌套EJS模板实现跨模板传值

EJS多层模板传值的3种标准实现方案


1. 显式透传参数(你当前的写法为官方推荐的标准实现,可正常使用)

EJS的include语法原生支持第二个参数传入自定义上下文对象,你写的逻辑完全符合规范:

  • 服务端渲染home.ejs时传入tofirstejs: usercount
  • home.ejs引入header.ejs时将tofirstejs重命名为tolastejs传入子模板
  • header.ejs直接通过<%= tolastejs %>即可拿到对应值
    如果该写法未正常渲染出值,优先排查两个常见问题:
  • 服务端usercount变量是否已正确赋值,EJS渲染时未定义的变量会默认返回空值
  • 多级传递时的变量名是否完全匹配,EJS变量严格区分大小写

2. 批量透传所有父级变量

如果需要将父模板可访问的所有参数全部传给子模板,不需要逐个手动声明,可以直接传入EJS内置的locals全局对象:

<!-- home.ejs 写法 -->
<%- include('partials/header.ejs', locals); -%>

此时header.ejs可以直接调用所有home.ejs能访问的变量,无需单独声明传值,适合子模板需要用到多个父级参数的场景。

3. 全局挂载公共变量

如果是全站通用的参数(比如用户数、站点配置、登录状态等),可以直接在服务端挂载到res.locals对象,所有模板都能直接访问,不需要逐层传递:

// server.js 全局中间件中统一挂载公共变量
app.use((req, res, next) => {
  res.locals.usercount = usercount // 所有渲染的模板都能直接调用usercount变量
  next()
})

// 路由渲染时不需要再单独传递该参数
app
  .route("/")
  .get((req, res) => {
    res.render("home")
  })

此时home.ejs、header.ejs、signin.ejs等所有参与渲染的模板,都可以直接用<%= usercount %>拿到值,无需任何传值操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03