Nodejs EJS帮助函数?

有没有办法将辅助函数注册到EJS模板,以便可以从任何EJS模板中调用它们? 所以,它应该像这样工作。

app.js

ejs.helpers.sayHi = function(name) { return 'Hello ' + name; }); 

index.ejs

 <%= sayHi('Bob') %> 

是的,在Express 3中,你可以添加助手到app.locals 。 例如:

 app.locals.somevar = "hello world"; app.locals.someHelper = function(name) { return ("hello " + name); } 

这些将在您的意见,如下所示:

 <% somevar %> <% someHelper('world') %> 

注意:Express 2.5的帮手不同。

我还有另一个解决scheme,我认为它有一些优点:

  • 不要监视你的代码导出filter。
  • 访问任何方法,而不需要全部导出。
  • 更好的ejs使用(无|pipe道)。

在你的控制器上:

 exports.index = function(req, res) { // send your function to ejs res.render('index', { sayHi: sayHi }); } function sayHi(name) { return 'Hello ' + name; }; 

现在你可以在你的ejs中使用sayHi函数:

 <html> <h1><%= sayHi('Nice Monkey!') %></h1> </html> 

您可以使用此方法将模块发送到ejs,例如,您可以发送“时刻”模块来格式化或parsingdate。

这里有一个示例filter…我不熟悉助手。

 var ejs = require('ejs'); ejs.filters.pluralize = function(num, str){ return num == 1 ? str : str+'s'; }; <%=: items.length | pluralize:'Item' %> 

如果它是1,将产生“Item”,或者如果0或> 1产生“Items”

app.js

 ejs.filters.sayHi = function(name) { return 'Hello ' + name; }); 

index.ejs

 <%=: 'Bob' | sayHi %> 

我在用:

在helpers / helper.js中

 var func = { sayhi: function(name) { return "Hello " + name; }, foo: function(date) { //do somethings }   }; module.exports = func; 

在路由器中:

 router.get('/', function(req, res, next) { res.render('home/index', { helper: require('../helpers/helper'), title: 'Express' }); }); 

在模板中:

 <%= helper.sayhi("Dung Vu") %> 

祝你好运