Nodejs EJS 辅助函数?

Posted

技术标签:

【中文标题】Nodejs EJS 辅助函数?【英文标题】:Nodejs EJS helper functions? 【发布时间】:2012-10-24 16:16:24 【问题描述】:

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

app.js

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

index.ejs

<%= sayHi('Bob') %>

【问题讨论】:

这项工作是否与 我编造了ejs.helpers 作为我正在寻找的示例,它不存在。所以这两种方式都没有关系,但你是对的,我可能应该把它切换到&lt;%= 过滤器是不可能的吗?它们类似于助手,并在 EJS github 上预先记录。您的助手将在模板中转换为 &lt;%= 'Bob' | sayHi %&gt; 之类的内容。该函数的编写方式相同。 如果您不是在谈论 visionmedia 的 ejs,我深表歉意。在这里草草下结论。 我试图测试使用过滤器是否真的有效,并允许我传递多个参数。我想如果我将一个对象作为参数传递,那将起作用。不过,这感觉像是一种解决方法。 【参考方案1】:

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

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 %>

【讨论】:

仅供参考,这不再适用于 EJS V2。 Dilanized 和 Robertomarin 在这两个版本中都有效。【参考方案2】:

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

app.locals.somevar = "hello world";

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

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

<% somevar %>

<% someHelper('world') %>

注意:Express 2.5 使用不同的助手。

【讨论】:

你在哪里写这样的代码?一个链接会很有帮助。 你可以在应用程序主体中编写这段代码,在做完 var app = express(); 哼。我只是没有app,因为它被sails.js重载了,把它写到app.js中可能是个坏主意,我宁愿把它写到另一个由app.js调用的文件中 config 文件夹中的 middleware.js 在github.com/stefanbuck/sails-social-auth-example 中为您提供了如何操作的指示。你可以在那里定义它 我发现 .ejs 文档中的调用需要使用 equals:.【参考方案3】:

我对此有另一种解决方案,我认为它有一些优势:

不要污染您的代码导出过滤器。 无需全部导出即可访问任何方法。 更好地使用 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' 模块来格式化或解析日期。

【讨论】:

+1 在此页面上帮助解决我的问题的唯一方法是 = 在函数 &lt;%= sayHi() %&gt; 之前,否则它不会打印【参考方案4】:

我正在使用:

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

祝你好运

【讨论】:

以上是关于Nodejs EJS 辅助函数?的主要内容,如果未能解决你的问题,请参考以下文章

我如何编写一个从 mongodb 查询的辅助函数,然后可以为任何 ejs 模板调用此函数

nodejs i18n __与ejs,express不是函数问题

mapState辅助函数

辅助函数和高阶函数 mapfilterreduce

024.CI4框架CodeIgniter辅助函数类之:URL辅助函数

Laravel 常用辅助函数