如何在EJS视图中获取Express传递的所有变量列表?
在EJS视图中访问所有传递的变量上下文
当然可以实现!在Express+EJS的组合里,所有通过res.render()传递给视图的变量,其实都会被自动挂载到视图的locals对象上——这就是你要找的包含所有变量的全局上下文。
举个例子,对应你给出的控制器代码:
homeAction(req, res) { res.render('index', { form: this.renderForm('aForm'), title: "My Super Title" }); }
在你的index.ejs视图里,你可以直接通过locals访问所有传递的变量:
1. 遍历所有变量(包括EJS内部变量)
<h3>所有传递的变量:</h3> <ul> <% Object.keys(locals).forEach(key => { %> <li> <strong><%= key %></strong>: <%= locals[key] %> </li> <% }) %> </ul>
2. 过滤掉EJS内部变量(只看你自己传递的)
EJS会自动添加一些下划线开头的内部变量(比如_locals、settings),如果只想看你自己定义的form和title,可以过滤掉这些内部字段:
<h3>自定义传递的变量:</h3> <ul> <% Object.keys(locals) .filter(key => !key.startsWith('_')) .forEach(key => { %> <li> <strong><%= key %></strong>: <%= locals[key] %> </li> <% }) %> </ul>
额外说明
平时你直接用<%= form %>或者<%= title %>就能访问单个变量,本质上是EJS帮你省略了locals.前缀——也就是说,<%= title %>和<%= locals.title %>是完全等价的。
内容的提问来源于stack exchange,提问作者BENARD Patrick
相关产品推荐
相关产品推荐

