Nodejs 通过dynamicHelper方法设的全局变量怎么在ejs模板中获取
Nodejs 通过dynamicHelper方法设的全局变量怎么在ejs模板中获取
通过官方文档的介绍这样弄的 app.use(function(req,res,next){ res.locals.headers = {name:‘leike’,gread:4}; next(); });
在模板中获取的时候总是显示headers is not difined ,这是出了什么问题?
3 回复
http://expressjs.com/4x/api.html express 4里面好像早就没有dynamicHelper了吧。
在Node.js中,使用res.locals
设置的变量可以在EJS模板中直接访问。而dynamicHelper
方法是Express框架早期版本中的一个概念,在现代Express版本中已经不推荐使用了。你提到的方法是通过中间件设置res.locals
,这是正确的做法。
以下是一个示例代码,展示了如何通过中间件设置res.locals
并在EJS模板中访问这些变量:
示例代码
服务器端代码 (app.js)
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
// 设置 res.locals 变量
app.use((req, res, next) => {
res.locals.headers = { name: 'leike', grade: 4 };
next();
});
// 路由
app.get('/', (req, res) => {
res.render('index'); // 渲染 EJS 模板
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
EJS 模板 (views/index.ejs)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example</title>
</head>
<body>
<h1>Welcome to the page!</h1>
<p>Name: <%= headers.name %></p>
<p>Grade: <%= headers.grade %></p>
</body>
</html>
解释
-
中间件:
- 在中间件函数中,我们通过
res.locals.headers
设置了一个对象。 next()
函数用于传递控制到下一个中间件或路由处理程序。
- 在中间件函数中,我们通过
-
EJS 模板:
- 在EJS模板中,可以直接使用
<%= headers.name %>
和<%= headers.grade %>
来访问res.locals
中的变量。 <%=
是EJS语法的一部分,表示输出变量的值。
- 在EJS模板中,可以直接使用
如果你在EJS模板中遇到“headers is not defined”的错误,可能是因为你没有正确地设置res.locals
或者你的模板引擎配置有问题。确保你的Express应用正确设置了EJS作为视图引擎,并且中间件按顺序正确执行。