Nodejs EJS辅助函数?

时间:2012-11-04 18:58:23

标签: node.js express ejs

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

app.js

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

index.ejs

<%= sayHi('Bob') %>

4 个答案:

答案 0 :(得分:31)

是的,在Express 3中,您可以向app.locals添加帮助程序。例如:

app.locals.somevar = "hello world";

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

这些可以在您的视图中访问,如下所示:

<% somevar %>

<% someHelper('world') %>

注意:Express 2.5的助手方式不同。

答案 1 :(得分:20)

我有另一个解决方案,我认为它有一些优点:

  • 不要将您的代码导出过滤器。
  • 访问任何方法而无需全部导出。
  • 更好的ejs用法(无|管道)。

在您的控制器上:

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,例如,您可以发送'moment'模块来格式化或解析日期。

答案 2 :(得分:3)

这是一个示例过滤器......我不熟悉助手。

var ejs = require('ejs');

ejs.filters.pluralize = function(num, str){
    return num == 1 ? str : str+'s';
};


 <%=: items.length | pluralize:'Item' %>

如果为1,则生成“Item”,或者如果为0或&gt; 1,产生“项目”

app.js

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

index.ejs

<%=: 'Bob' |  sayHi %>

答案 3 :(得分:1)

我正在使用:

在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") %>

古德勒克