Javascript 在NodeJS应用程序中使用手柄时,将TypeError作为registerHelper不是一个函数
我的NodeJS应用程序有下面的代码,我试图注册一个Handlebar if-else逻辑,以便在模板文件中使用它。但是,它将错误作为TypeError抛出:hbs.registerHelper不是一个函数。有谁能指出我犯的错误,并建议我如何注册if-elseif-else逻辑来执行相等或比较检查,从而在模板中构建决策逻辑 package.json中的express Handlebar版本是3.0.0Javascript 在NodeJS应用程序中使用手柄时,将TypeError作为registerHelper不是一个函数,javascript,node.js,express-handlebars,registerhelper,Javascript,Node.js,Express Handlebars,Registerhelper,我的NodeJS应用程序有下面的代码,我试图注册一个Handlebar if-else逻辑,以便在模板文件中使用它。但是,它将错误作为TypeError抛出:hbs.registerHelper不是一个函数。有谁能指出我犯的错误,并建议我如何注册if-elseif-else逻辑来执行相等或比较检查,从而在模板中构建决策逻辑 package.json中的express Handlebar版本是3.0.0 var exp = require('express'); var pth = require
var exp = require('express');
var pth = require('path');
var fcon = require('serve-favicon');
var logger = require('morgan');
var cp = require('cookie-parser');
var bp = require('body-parser');
var exphbs = require('express-handlebars');
var index = require('./routes/index');
var app = express();
exphbs.registerHelper("if", function(conditional, options) {
if (options.hash.desired === options.hash.type) {
options.fn(this);
} else {
options.inverse(this);
}
});
// view engine setup
app.engine('hbs', exphbs({extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views/mylayouts/'}));
app.set('views', pth.join(__dirname, 'views'));
app.set('view engine', 'hbs');
助手只能注册为快速把手:
var hbs = exphbs.create({
// Specify helpers which are only registered on this instance.
helpers: {
foo: function () { return 'FOO!'; },
bar: function () { return 'BAR!'; }
}
});
或者,如果您想动态注册它们。您可以像这样使用实例引用:
hbs.handlebars.registerHelper("superHelper", () => 42);
app.get('/', function (req, res, next) {
res.render('home', {
showTitle: true,
// Override `foo` helper only for this rendering.
helpers: {
foo: function () { return 'foo.'; }
}
});
});
进一步移动,您可能希望在渲染级别覆盖辅助对象。您可以这样做:
hbs.handlebars.registerHelper("superHelper", () => 42);
app.get('/', function (req, res, next) {
res.render('home', {
showTitle: true,
// Override `foo` helper only for this rendering.
helpers: {
foo: function () { return 'foo.'; }
}
});
});
资料来源:
编辑:
添加if帮助程序:
谢谢,如何使用上述语法来满足if-elseif-else逻辑的要求?一个语法示例会很有帮助。答案很有帮助。然而,最后一个问题是关于把手模板。如果我发送一个具有name属性的变量'p',那么在If函数中使用上述逻辑时,这种语法会起作用吗?{{if p.name==hello}},或者我需要为此更改帮助程序,或者需要编写另一个帮助程序来处理此问题?首先:如果应该内置帮助程序。要进行比较,您需要另一个助手-查看此项目,您可以使用或搜索示例:。是否有一个内置的比较部分?怎么可能呢?我正在使用的快速车把没有内置的if助手。如果我写了另一个帮助器来进行比较,那么定义其比较行为的if helper函数体有什么用呢?Idk您使用什么版本,但是我的express handlebars 3.0.0内置了if。要了解标准块辅助对象行为,请查看