用节点注册handlebars助手完全没有

我试图写我自己的把手帮手,我没有得到任何地方。 我使用npm hbs软件包(Handlebars.registerHelper不起作用),并在app.js中注册,如下所示:

app.set('view engine', 'hbs'); var hbs = require('hbs'); hbs.registerHelper("log", function(something) { return console.log(something); }); hbs.registerHelper('test', function() { return console.log('test') }); 

然而{{log'test'}}或者{{test}}在我的模板里面什么都不做。 在浏览器或terminal控制台中没有产生js错误。 我知道句柄工作正常,因为我有其他的HBvariables正确显示。 我在我的智慧结束在这里试图做一些非常简单的事情,否则我不会尴尬我的自我提出这样一个简单的问题。

感谢您的时间。

       

网上收集的解决方案 "用节点注册handlebars助手完全没有"

感谢您inputmscdex,但您的回应无效。 我会澄清我是如何在这里为其他新手柄工作的。 我正在使用npm hbs包,因为我find了很好的帮手例子。 在深入研究之后,我以前的句柄包“express-handlebars”在npm页面上有一些实际工作的例子。 我认为我的主要困惑是不知道声明中第一个variables在哪里被定义的结果。

下面是我的app.js文件中的代码,声明哪些句柄包使用。

 var exphbs = require('express-handlebars'); app.engine('.hbs', exphbs({defaultLayout: 'main', extname: '.hbs'})); app.set('view engine', 'hbs'); 

然后,在特定页面的路由中,助手的定义方式与标题或数据数组相同:

 res.render('editSite', { title: 'Update Existing Site\'s Data', siteVars: siteVars, helpers: { foo: function () { return console.log('test'); } } }); 

你需要从助手中实际返回一个string。 console.log()返回undefined 。 试试这个:

 hbs.registerHelper("log", function(something) { console.log(something); return ''+something; }); hbs.registerHelper('test', function() { console.log('test'); return 'test'; }); 

在我看来,如果这是关于全局助手(可能不是最好的解决scheme,但是…),那么最简单的方法就是创build你的助手文件:

 module.exports = { customif: (options)=>{ return (options.hash.expected === options.hash.val) ? options.fn(this) : options.inverse(this); } } 

然后,要求:

 const handlebarsHelpers = require('./helpers/handlebars'); 

最后,当你把express连接到句柄时,你可以在对象中插入helper:

 app.engine('hbs', handlebars({ extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views/layouts/', helpers: handlebarsHelpers })); 

你可以在你的布局中使用它blabla.hbs

 {{#customif expected='foo' val=field}} bar {{/customif}} 

为我工作…