在节点 js 应用程序中使用车把时,获取 TypeError 作为 registerHelper 不是函数
Getting TypeError as registerHelper is not a function when using handlebars in node js application
我的节点 js 应用程序具有以下代码,其中我试图注册一个把手 if-else 逻辑以便在我的模板文件中使用它。但是它抛出错误 "TypeError: hbs.registerHelper is not a function"。谁能指出我正在犯的错误并建议我如何注册一个 if - elseif -else 逻辑来执行相等(或比较)检查以在我的模板中构建决策逻辑?
package.json 中的 express-handlebars 版本是 3.0.0
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');
只能为 express-handlebars:
的实例注册助手
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.'; }
}
});
});
编辑:
正在添加 if
助手:
app.engine('hbs', exphbs({
extname: 'hbs',
defaultLayout: 'layout',
layoutsDir: __dirname + '/views/mylayouts/',
helpers: {
if: function(conditional, options) {
if (options.hash.desired === options.hash.type) {
options.fn(this);
} else {
options.inverse(this);
}
}
}
}));
我的节点 js 应用程序具有以下代码,其中我试图注册一个把手 if-else 逻辑以便在我的模板文件中使用它。但是它抛出错误 "TypeError: hbs.registerHelper is not a function"。谁能指出我正在犯的错误并建议我如何注册一个 if - elseif -else 逻辑来执行相等(或比较)检查以在我的模板中构建决策逻辑?
package.json 中的 express-handlebars 版本是 3.0.0
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');
只能为 express-handlebars:
的实例注册助手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.'; }
}
});
});
编辑:
正在添加 if
助手:
app.engine('hbs', exphbs({
extname: 'hbs',
defaultLayout: 'layout',
layoutsDir: __dirname + '/views/mylayouts/',
helpers: {
if: function(conditional, options) {
if (options.hash.desired === options.hash.type) {
options.fn(this);
} else {
options.inverse(this);
}
}
}
}));