Javascript 将函数与express.js一起使用;“本地人”;
来自Rails/Sinatra的背景,如果不能在我的视图文件中使用helper函数,我会感到很不自在,但是在express.js中实现这一点是相当困难的 您可以像这样设置为自动包含Javascript 将函数与express.js一起使用;“本地人”;,javascript,node.js,express,Javascript,Node.js,Express,来自Rails/Sinatra的背景,如果不能在我的视图文件中使用helper函数,我会感到很不自在,但是在express.js中实现这一点是相当困难的 您可以像这样设置为自动包含 app.set("name", "Adam's App"); 然后在视图文件中,访问变量非常简单: <!-- views/template.ejs --> <title><%= settings.name %></title> …但是调用不会执行函数(显然),更不用
app.set("name", "Adam's App");
然后在视图文件中,访问变量非常简单:
<!-- views/template.ejs -->
<title><%= settings.name %></title>
…但是调用
不会执行函数(显然),更不用说让我将timestamp
参数传递给它了
我这样做对吗?您可以在、和/或处设置视图变量 所以你可以把这些结合起来,做一些类似的事情:
app.locals.date_helper = function(ts) {
return (new Date(ts)).toISOString();
});
app.get('/', function(req, res) {
res.render('main', { timestamp: 1406809421643 });
});
然后在模板中:
日期是:
在一个半相关的注释中,您应该知道ejs使用了什么。使用应用程序中间件
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"
//output=“示例测试”
//output=“你好,Abdo”
渲染时,是否尝试直接传递函数.render('something',{settings:app.settings,helper:function(){…},function(err,stuff){…})代码>沿着这些线ish@Deryck我不需要使用设置:app.settings
(我想这在express 3.0中已经被弃用了?)。除此之外,我的目标是访问这些函数,而不必在.render
块中指定它。在我定义的每一条路径中都必须使用date\u helper:function(){..}
,这似乎是相当蹩脚的,同意吗?是的,我只是说作为一个故障排除选项,但下面的答案实际上已经有了。我本来打算推荐app.locals.date\u helper的作业,但看起来他的作业比我想说的要好。app.set(x)
与app.locals.x
做的事情不完全一样吗?您可能可以使用它,但是您必须在视图中执行类似于settings.date\u helper(timestamp)
的操作app.set()
/app.get()
/settings
通常应仅用于应用程序设置,而不是添加帮助程序和其他类似的视图特定内容。Mhmmm。假设您有一个要设置帮助函数的对象:var helpers={date\u helper:function(){…},name\u helper:function(){…}
。如果我们循环对象中的每个kv对来设置每个kv对,是否可以使用app.locals
来设置它们?我目前使用app.set
使用:object.keys(helpers).forEach(函数(helper){app.set(helper,helpers[helper])代码>是的,您可以为app.locals
执行类似的操作:对象.keys(helpers).forEach(函数(helper){app.locals[helper]=helpers[helper]})代码>
<%= test %> // output = " Sample test "
<%= test_function("Abdo") %> // output = " Hello Abdo"