我试图在我的快递节点应用程序上注册把手,但似乎它没有工作
Jim
Jack
Paul
Rob
--------------
Smith
Jones
Aznar
Diaz
在.hbs文件中我运行此代码
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)
}
});
然后我收到了这个错误
错误:缺少助手:" if_equal"车把
答案 0 :(得分:3)
问题在于您使用了两种不同的视图引擎。 express-handlebars& hbs
您正在使用.hbs
呈现express-handlebars
个文件,而您正在将帮助者注册到hbs
。
删除express-handlebars
,然后删除此行:
app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));
扩展名.hbs是hbs的默认值:
使用hbs作为默认视图引擎只需要一行代码 你的应用设置。这将在调用res.render时呈现.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)
}
});
//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