使用express.js“locals”的函数

时间:2014-07-31 11:46:54

标签: javascript node.js express

来自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参数传递给它。

我能以正确的方式解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以在app levelresponse 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"