标签:javascript node-js express handlebars-js
我试图在我的快递节点应用程序上注册把手,但似乎它不起作用
const express = require('express');
const hbs = require('hbs');
const expressHbs = require('express-handlebars');
const app = express();
app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));
app.set('view engine', 'hbs');
hbs.registerHelper('if_equal', function(a, b, opts) {
if (a == b) {
return opts.fn(this)
} else {
return opts.inverse(this)
}
});
在.hbs文件中我运行此代码
{{#if_equal x "my_string"}}
x is "my_string"
{{else}}
x isn't "my_string"
{{/if_equal}}
然后我收到了这个错误
Error: Missing helper: “if_equal” handlebars
解决方法:
问题是你正在使用两个不同的视图引擎. express-handlebars& hbs.
您正在使用快速手柄呈现您的.hbs文件,而您正在向hbs注册帮助程序.
使用hbs
放下快递把手,然后放下这一行:
app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));
扩展名.hbs是hbs的默认值:
Using hbs as the default view engine requires just one line of code in
your app setup. This will render .hbs files when res.render is called.
app.set('view engine', 'hbs');
hbs.registerHelper('if_equal', function(a, b, opts) {
if (a == b) {
return opts.fn(this)
} else {
return opts.inverse(this)
}
});
使用快递把手
//remove require('hbs');
const expressHbs = require('express-handlebars');
const hbs = expressHbs.create({
// Specify helpers which are only registered on this instance.
helpers: {
if_equal: function(a, b, opts) {
if (a == b) {
return opts.fn(this)
} else {
return opts.inverse(this)
}
}
}
});
//The following example sets up an Express app to use
//.hbs as the file extension for views:
app.engine('.hbs', expressHbs({extname: '.hbs'}));
app.set('view engine', '.hbs'); //with dot
标签:javascript,node-js,express,handlebars-js 来源: https://codeday.me/bug/20190627/1307335.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。