来自Rails / Sinatra的背景,我不会在我的视图文件中使用辅助函数而感到宾至如归,但是在express.js中实现这一点已经证明非常困难。
您可以将locals设置为自动包含在内......
app.set("name", "Adam's App");
然后在视图文件中,访问变量就像:
一样简单<!-- views/template.ejs -->
<title><%= settings.name %></title>
但功能怎么样?如果我想在我的视图中使用date_helper
函数,该怎么办?我尝试设置它就像你变量......
app.set("date_helper", function(timestamp){ ... });
...但是,调用<%= settings.date_helper %>
不会执行该函数(显然),更不用说让我将timestamp
参数传递给它。
我能以正确的方式解决这个问题吗?
答案 0 :(得分:2)
您可以在app level,response level和/或at the time of render设置视图变量。
所以你可以将它们结合起来并做类似的事情:
app.locals.date_helper = function(ts) {
return (new Date(ts)).toISOString();
});
app.get('/', function(req, res) {
res.render('main', { timestamp: 1406809421643 });
});
然后在你的模板中:
The date is: <%= date_helper(timestamp) %>
在半相关的说明中,您应该了解ejs使用的special view variable names。
答案 1 :(得分:0)
使用应用中间件
app.use((req, res, next) => {
res.locals = {
test: 'Sample Test',
test_function: (name) => {
return 'Hello ' + name;
}
}
next();
});
可以使用的视图
<%= test %> // output = " Sample test "
<%= test_function("Abdo") %> // output = " Hello Abdo"