Nodejs EJS辅助函数?

Far*_*her 27 ejs node.js express

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

app.js

ejs.helpers.sayHi = function(name) {
    return 'Hello ' + name;
});
Run Code Online (Sandbox Code Playgroud)

index.ejs

<%= sayHi('Bob') %>
Run Code Online (Sandbox Code Playgroud)

dyl*_*zed 31

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

app.locals.somevar = "hello world";

app.locals.someHelper = function(name) {
  return ("hello " + name);
}
Run Code Online (Sandbox Code Playgroud)

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

<% somevar %>

<% someHelper('world') %>
Run Code Online (Sandbox Code Playgroud)

注意:Express 2.5对帮助者的帮助不同.


小智 20

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

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

在你的控制器上:

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

function sayHi(name) {
    return 'Hello ' + name;
};
Run Code Online (Sandbox Code Playgroud)

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

<html>
    <h1><%= sayHi('Nice Monkey!') %></h1>
</html>
Run Code Online (Sandbox Code Playgroud)

您可以使用此方法将模块发送到ejs,例如,您可以发送'moment'模块来格式化或解析日期.


cho*_*ovy 5

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

var ejs = require('ejs');

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


 <%=: items.length | pluralize:'Item' %>
Run Code Online (Sandbox Code Playgroud)

如果为 1,则生成“Item”;如果为 0 或 > 1,则生成“Items”

应用程序.js

ejs.filters.sayHi = function(name) {
    return 'Hello ' + name;
});
Run Code Online (Sandbox Code Playgroud)

索引.ejs

<%=: 'Bob' |  sayHi %>
Run Code Online (Sandbox Code Playgroud)